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