setTimeout设置为0的意义

时间:2022-05-16 04:17:59

今天再看 Promise 代码时,有个地方用到了setTimeOut函数,但是第2个参数设为0,顿时懵逼了,这是啥意思?

  function resolve(newValue) {
value = newValue;
state = 'fulfilled';
setTimeout(function () {
callbacks.forEach(function (callback) {
callback(value);
});
}, 0);
}

于是百度了一下,自己理解如下 就是将同步代码转异步代码,setTimeout(fn, 0)的作用它可以将最后两个语句添加到运行队列的队尾,并保证在浏览器处理完其他事件之后再运行最后这两个语句。

alert(1);
setTimeout(function(){alert(2); }, 0);
alert(3);
setTimeout(function(){alert(4); }, 0);
setTimeout(function(){alert(5); }, 0);
setTimeout(function(){alert(6); }, 0);
alert(7);

这样的输出结果是 
先是1,3,7 这是一定的 然后2,4,5,6这个是不规律乱序的 
因为2456的代码被异步执行了。

参考:

https://www.zhihu.com/question/55050034/answer/158127840

https://www.cnblogs.com/silin6/p/4333999.html

http://www.mamicode.com/info-detail-1106724.html