青年强大主义

学习是没有放弃治疗的最好标准!
js:setTimeout 与 setInterval 比较

在javascript中有两个非常有用的函数:setTimeout 和setInterval ,都是定时器;但是两者存在着一些区别;

1. setTimeout函数

用法:setTimeout(fn,time);

解释:在time毫秒之后执行函数fn

示例:

    function  setTimeoutTest(){

       alert(“函数开始执行”);               //第一步

       setTimeout(function(){           //第二步

            alert("定时器生效");            //定时程序

       },1000); 

       alert("函数执行完了");               //第三步

    }

 

下面一段话来自网络,可靠性待考证;

代码解释:函数由三步构成,第一步:alert("函数开始执行");  浏览器弹出提示框;第二步setTimeout()函数将其第一个参数(匿名函数)插入js执行队列中,等待1000毫秒后执行。第三步是:alert("函数执行完了");js程序是单线程的,所有要执行的操作都是有序的存在于执行队列中的。当调用setTimeoutTest函数,第一步会立即执行,这个是毫无疑问的,js程序是按照先后顺序执行的,所以来到第二步,但是第二步设置了定时器,所以程序不会立即执行。执行跳到第三部,会立即执行,这也是毫无疑问的。这样,三个弹窗的顺序就为:1-3-2。现在要考虑的问题是:setTimeout函数中的程序在所设置的1000毫秒后是否立即执行?而只是将程序插入到执行队列中,然后跳过具体的执行程序,这样第二步执行的弹窗在第三步之后,现在更总要的问题是:1000秒后第二步所设置的定时器一定会执行吗?第二步程序会在整个setTimeoutTest函数执行完成后执行。假如第三步的执行时间小于1000毫秒,则执行完成后队列中已经没有了待执行的程序,则第二步会在1000毫秒后执行。假如第三步的执行时间大于1000毫秒,则当1000毫秒后第二步程序仍然处在执行ing状态,js解释器不会停下当前的工作去处理定时程序,所以第二步将在第三步程序执行完成后执行(此时已超过了1000毫秒)。

 

2. setInterval 函数

用法:setInterval(fn,time)

解释:以time为周期调用函数fn;

示例:

     function say(){

        setInterval(alert("hello world!"),1000);

    } 

    say();

 程序会在say函数执行的时间点为起始点,距起始点1000毫秒调用alert("hello world!"),以alert()被执行的点为t1点,距t1点1000毫秒时再次条用alert(),依次类推,递归调用。

posted on 2014-06-05 09:59  青年强大主义  阅读(454)  评论(0编辑  收藏  举报