setTimeout設置爲0 爲啥不能立馬執行

setTimeout(function(){}, timer) 是指延時執行。第一個參數是回調函數,第二個參數是指延時多久執行回調函數。瀏覽器

setTimeout(function(){console.log(1);}, 0);
console.log(2);  //輸入是 2 ,1

setTimeout(fn, 0)的含義是,指定某個任務在主線程最先可得的空閒時間執行,也就是說,當前代碼執行完(執行棧清空)之後,儘量的早執行。它在「任務隊列」的尾部添加一個事件,所以要等到同步任務和「任務隊列」現有的事件都處理完,纔會獲得執行。函數

HTML5標準規定了setTimeout()的第二個參數的最小值不得小於4毫秒,若是低於這個值,則默認是4毫秒。在此以前。老版本的瀏覽器都將最短期設爲10毫秒。另外,對於那些DOM的變更(尤爲是涉及頁面從新渲染的部分),一般是間隔16毫秒執行。這時使用requestAnimationFrame()的效果要好於setTimeout();spa

注意:setTimeout()只是將事件插入了「任務隊列」,必須等當前代碼(執行棧)執行完,主線程纔會去執行它指定的回調函數。要是當前代碼消耗時間很長,也有可能要等好久,因此並沒辦法保證回調函數必定會在setTimeout()指定的時間執行。因此,setTimeout()的第二個參數表示的是最少時間,並不是是確切時間。線程

以下代碼,在代碼塊中(<script></script>)的代碼都執行完成後,纔會延時0毫秒執行setTimeout()中的回調函數,所以輸出的是:1,3,4,5,2code

 

setInterval()與setTimeout()運行機制同樣,都據有定時器功能,只是setInterval()是延時循環執行,setTimeout()只執行一次。blog

定時器佔用cpu較多,建議酌情使用。隊列

相關文章
相關標籤/搜索