亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

js事件回調函數為什么沒有經過任務隊列等待就立即執行了

js事件回調函數為什么沒有經過任務隊列等待就立即執行了

慕少森 2018-07-25 17:14:34
按照js的原理,事件處理函數是回調,應該事件觸發后把綁定的函數添加到任務隊列等待下一輪事件循環才執行,得等任務隊列的回調,但圖中的主線程的所以程序執行完才執行,但圖中的代碼最先輸出2,然后才輸出for循環的1,for沒執行完怎么就執行任務隊列的回調了,求解
查看完整描述

3 回答

?
慕娘9325324

TA貢獻1783條經驗 獲得超4個贊

輸入結果是對的,在a.click()開開始執行方法,輸出2,然后就是舒心執行1.....接下來定時器執行354


查看完整回答
反對 回復 2018-07-30
?
holdtom

TA貢獻1805條經驗 獲得超10個贊

因為 setTimeout.
調用 setTimeout 后會在等待時間后再執行代碼,
也就是說執行到 setTimeout(function () {console.log(3)},0); 并不立即執行要等待0毫秒再執行.
那么問題來了. 如果是等待0毫秒執行. 那輸出結果應該是
3 5 2 1 4 ; 
因為執行 for的時間應該會超過 0毫秒.
這是為因為 js 的解析機制引起的.
js會優先解析后整個js塊. 然后再調用setTimeout.
所以輸出的結果就成了 
2 1 3 5 4

查看完整回答
反對 回復 2018-07-30
  • 3 回答
  • 0 關注
  • 1393 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號