設置setTimeout延時爲0ms的作用

       當我們執行以下代碼時,結果會按1、3、2的順序彈出。

alert(1);
setTimeout(function() {
    alert(2);
},0);
alert(3);

       這是事件循環機制,因爲js是單線程的,是基於事件循環的。而setTimeout函數是異步的,異步的事件會加入一個隊列,會等到當前同步的任務執行完畢後,再執行setTimeout隊列的任務。所以,通過設置任務在延遲0毫秒後執行,就能改變任務執行的先後順序,延遲該任務發生,改變它所調用的函數的優先級,使之異步執行。

       例:
1. 下面這段代碼,是不會實時獲取到輸入框裏面的內容的。

<input type="text" onkeydown="test(this.value)">  
<div></div>  
<script">  
  function test(val) {  
    document.getElementsByTagName('div')[0].innerHTML = val;  
  }  

       可以發現,每按下一個字符時,< div > 中只能顯示出之前的內容,無法得到當前的字符。結果如下:
在這裏插入圖片描述

2. 利用 setTimeout延時爲0,我們把取 value 的操作放入隊列中,放在更新 value 值以後.

<input type="text" onkeydown="var that=this; setTimeout(function() {test(that.value)}, 0)">  
<div></div>  
<script">  
  function test(val) {  
    document.getElementsByTagName('div')[0].innerHTML = val;  
  } 

       能夠實時顯示輸入的內容,結果如下:
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章