javascript - 一個setTimeout的問題
某草草
某草草 2017-06-14 10:53:57
0
3
570
###功能測試() {### 雷雷
某草草
某草草

全部回覆(3)
仅有的幸福

首先建議題主看一篇關於JavaScript文章
JavaScript Event Loop運作機制詳解

這篇文章詳細闡述了JavaScript事件輪詢的原理

下面來說說題主的問題:

1、主執行緒會先執行,當執行到test()的時候兩個setTimeout會同時被放進任務佇列,然後執行alert(0),所以先輸出0,此時a的值是19,因為setTimeout還沒執行,a沒有其他賦值機會;

2、主執行緒執行完畢然後輪詢任務佇列執行定時任務,由於第一個setTimeout時間較第二個短,因此首先執行第一個setTimeout的回調,此時約1s後alert(a)會輸出上一步的19,然後a被賦值為5;

3、接著便執行第二個setTimeout,因為兩個setTimeout同時被放進隊列裡面,所以這裡大約會在2s後執行第二個setTimeout的回調,此時會輸出上一步得到的5,然後a被賦值為4。大約2s是因為Javascript定時器並不精確

三叔

自己的debug 了解機制會更透徹

漂亮男人

第一個定時器執行完 全域的a就已經變成5了
test函數中a的變化:1-19-5-最後一次alert(a)-4

熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板