setTimeout設置為0的意義


今天再看 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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM