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

1  function resolve(newValue) {
2         value = newValue;
3         state = 'fulfilled';
4         setTimeout(function () {
5             callbacks.forEach(function (callback) {
6                 callback(value);
7             });
8         }, 0);
9  }

于是百度了一下,自己理解如下 就是将同步代码转异步代码,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

posted on 2018-05-14 09:55  睡着的糖葫芦  阅读(1726)  评论(0编辑  收藏  举报