setTimeout 的一點理解

setTimeout,延時觸發(fā)。
用法示例

setTimeout(`console.log(1)`,1000);
setTimeout(()=>{console.log(1)},1000);

首先,理解 setTimeout 是一個函數方法,接收兩個參數,會異步加載傳入的函數。

function cslog(){
  setTimeout(`console.log(5)`,3000)
};
console.log(1);
cslog();
setTimeout(`console.log(2)`,2000);
setTimeout(`console.log(3)`,1000);
console.log(4);

//返回的結果依次為1,4,3,2,5
//由于異步,所以先執(zhí)行1,4,再執(zhí)行3,2,5,
//注意,這里的 5 最后執(zhí)行

ok,這里談談最后打印 5 。
我的理解是,setTimeout 所謂異步,會將所有傳入的函數放在同一個作用域下,然后根據延時的時間依次執(zhí)行。

還有一點,setTimeout 會返回一個數字,作為異步執(zhí)行的一個標識,可以通過clearTimeout 這個值,讓其不執(zhí)行,并且這個值是全局的,可以在同頁面的任何地方操作,這點用的多的應該是 setInterval 及 clearInterval。

let timer;
function a(){
  timer = setTimeout(()=>{console.log(1)},10000); //10s 后打印1
};

function b(){
  a();
  console.log(2)
};

clearTimeout(timer) ;

以上,我們知道可以取消10s后的打印,感覺是將 setTimeout 賦值給 timer,timer 是全局的,但是,但是,但是,這里的 timer 是 number,也就是說,只需要知道 number 的值,我們就可以直接 clearTimeout(number) 達到同樣的效果。

所以,可以這樣理解 setTimeout,每次進行 setTimeout 會生成一個狀態(tài)并給這個狀態(tài)一個編號,并且這個編號是連續(xù)的,當主路上的代碼執(zhí)行完后,才開始執(zhí)行所有的異步代碼,所有的異步代碼,通過設定的延時時間分先后同步執(zhí)行。

function cslog(){
  setTimeout(`console.log(5)`,1000)
};
console.log(1);
cslog();
setTimeout(`console.log(2)`,1000);
setTimeout(`console.log(3)`,1000);
console.log(4);

//打印結果1,4,5,2,3
//延時都為1s,異步后,代碼又得按同步規(guī)則進行執(zhí)行

所以,這個會怎樣輸出呢?

function a(){
  setTimeout(()=>{
    setTimeout(()=>{
      console.log(1)
    },1000)
  console.log(2)
  },2000)
};

setTimeout(()=>{console.log(3)},3000);
a();

//**************************************************************************************************2 3 1
?著作權歸作者所有,轉載或內容合作請聯系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

  • JavaScript提供定時執(zhí)行代碼的功能,叫做定時器(timer),主要由setTimeout()和setInt...
    晚晴幽草閱讀 1,726評論 1 18
  • 我們經常會碰到一些需要定時執(zhí)行的需求,比如輪播圖、延遲消失等,這時候我們就會用到 setTimeout 這個方法了...
    ac68882199a1閱讀 6,829評論 16 22
  • https://nodejs.org/api/documentation.html 工具模塊 Assert 測試 ...
    KeKeMars閱讀 6,603評論 0 6
  • 弄懂js異步 講異步之前,我們必須掌握一個基礎知識-event-loop。 我們知道JavaScript的一大特點...
    DCbryant閱讀 2,879評論 0 5
  • 早幾天看了《剩者為王》,想要寫點東西來著,但后來又擱筆了。今天看了朋友圈的一篇文章“世上只有該結婚的感情,沒有該結...
    xiaomianger閱讀 624評論 0 1

友情鏈接更多精彩內容