setTimeout的用法

setTimeout的用法,时间设置为0时的特殊情况;输出顺序

setTimeout()方法是超时调用方法,接受两个参数:要执行的代码和以毫秒为单位的时间(即在执行代码前需要等待多长毫秒)。

有一种情况是,经过指定的时间后指定的代码不一定立马执行。因为JS是一个单线程的解释器,一段时间只能执行一段代码。在执行任务队列中,如果队列是空的,那么通过setTimeout()添加的代码会立即执行;如果队列不是空的,那么它就要等前面的代码执行完了以后再执行。

所以setTimeout()方法中,时间设置为0,那么会先执行位于其后但在任务队列中优先于它的代码。
比如:

1
2
3
4
5
6
7
setTimeout(function(){
console.log(1);
},200);
setTimeout(function(){
console.log(2)
},0);
console.log(3); //输出顺序:3 2 1

并且0毫秒实际上达不到的。根据HTML5标准,setTimeOut推迟执行的时间,最少是4毫秒。如果小于这个值,会被自动增加到4。这是为了防止多个setTimeout(f,0)语句连续执行,造成性能问题。

参考文章:
你所不知道的setTimeout