setTimeout 0的意义
2019-04-11
setTimeout 0的意义
setTimeout是一个计时器,但经常看到有setTimeout(func,0)
的写法,那实际有什么作用呢?
首先JS是单线程模型,任何时间都只有一段代码可以在运行。
javascript维护一个setTimeout队列,未执行的setTimeout任务就在队列里排序,等到线程空闲时和时间抵达才会执行,相当于协程。
那么setTimeout 0最大的意义就在此,等主任务结束了才会运行。
例如如下:
for(var i={j:0};i.j <5;i.j++){
console.log('main');
(function(i){
setTimeout(function(){console.log(i.j)},0);
})(i);
}
//main
//main
//main
//main
//main
// 5
// 5
// 5
// 5
// 5
如以上代码所示,所有的setTimeout 0任务可以确保都在主循环结束之后执行。