关于setInterval和setTimeout的执行问题

setInterval作用是循环回调,setTimeout是间隔多少毫秒后仅“执行”一次函数。很多人都会误解当设置的时间到了时,函数就会被执行。其实非也。他们的真实意义其实是当时间到了时准时把定时器代码放入队列中以等待被执行

js引擎是单线程的。而实际上,浏览器负责进行排序,指派某段代码在某个时间点运行的优先级,而js就负责顺序执行队列中的代码就行。

下面看一个例子:


结果如下:


现在来说一下重复的定时器问题。(参考高程3)

重复定时器的两个缺点:

1.某些间隔可能会被跳过        2.多个定时器代码执行的时间间隔可能会比预期小

使用setInterval创建的定时器确保了定时器代码规则地插入队列中。但当定时器代码再次被添加到队列之前先前的定时器代码还没有运行完就会导致定时器代码的重复运行。(因为前面的定时器代码正运行,规定时间到了就把定时器代码又插入队列,这样就会导致队列中有连续多个定时器代码,等前一个执行完时js又接着运行队列的头一个,就这样导致定时器代码的重复运行)。但其实js引擎能够避免这个问题。当使用setInterval时仅当队列中没有该定时器的任何代码时才能添加入其中。


为了避免重复定时器的两个缺点,可用如下模式:


以上存属个人见解和感悟,若有不对请加以指正。若转载请声明出处。谢谢

你可能感兴趣的:(关于setInterval和setTimeout的执行问题)