JavaScript "自"运行-setInertval()和setTimeout()理解

setInterval()和clearInterval()

setInterval()在JS知识导图上属于 JS的 Windows对象方法, 参考www.w3school.com.cn 与我们最常用的alert()方法是"平行"的, 由于Window对象是浏览器全局对象,所以按照JS的编程习惯,window可以不用coding

var result = "Y";
function onOk()
{
    var tid = setInterval(function () {
        if (result == "Y")
        {
            window.location.href=window.location.href;
            clearInterval(tid);
        }
        result = "N";
    }, 3000);
}
//当点击一按钮3秒后,利用setInterval()方法刷新页面

setTimeout()和clearTimeout()

<div class="divSpace" style="text-align: center;">
    <input type="submit" name="ctl00$ContentPlaceHolder1$bt" value="下一步" id="ContentPlaceHolder1_bt" class="btnSubmitYellow" />
</div>

<script language="javascript" type="text/javascript">
    var time = 10;
    var timeout = null; //用于指引自运行的function的句柄,这里是window.setTimeout(enable_button, 1000);
    function enable_button() {
        var bt = document.getElementById("ctl00$ContentPlaceHolder1$bt");
        if (time > 0) {
            bt.value = '还剩余' + time + '秒';
            bt.disabled = "true";
            time = time - 1;
            timeout = window.setTimeout(enable_button, 1000);
        }
        else {
            bt.value = '开始测试';
            bt.disabled = "";
            window.clearTimeout(timeout);
        }
    }

    function window.onload() {
        enable_button();
    }
</script>
//倒计时实例

 setTimeout()定义

1).它属于JS原生范畴, 和JS的Window(浏览器对象)等平行,参考

2).属于JavaScript计时器,让我们有能力作到在一个设定的时间间隔之后来执行代码,而不是在函数被调用后立即执行。我们称之为计时事件。

setTimeout和setInterval的区别你真的了解吗?  推荐,说到本质了,这篇文章以理解性翻译的形式讲解了setInterval()函数的意义,需要花些时间思考加以理解其中的意味.

Javascript程序都是以单线程的方式运行于浏览器的javascript引擎中的, setTimeout和setInterval的作用只是把我们要执行的代码在我们设定的一个时间点插入js引擎维护的一个代码执行队列中, 时间点待插入的代码不意味着一到时间点就会被立即插入,接着立即执行的,理解这一点很重要.

function click() { 
    // code block1... 
    setTimeout(function() { 
        // process ... 
    }, 200); 
    // code block2 
}

 

3).当点击click事件, JS引擎开始执行code block1,执行setTime,接着执行code block2,到200m后,准备将process插入JS执行队列,如code block2执行超过200ms,按照文章的解释, setTime是不会将process过程插入到JS执行队列,必须等到click处理结束在执行process.
4).原生的setTime是没有循环执行的"味道"的,如果需要让setTime变成循环执行,需要自递归调用.
5).原生的setInterval是有循环执行的"味道"的,即每隔多少时间间隔,会将执行代码插入JS执行队列, 但是会发生插入执行被打断的情况,在setTime一文中给了解释.

posted @ 2016-08-30 10:00  轴轴  阅读(593)  评论(0编辑  收藏  举报