判斷for(var i=0;i<=3;i++){ setTimeout(function() { console.log(i) }, 10) }


原文:https://www.jianshu.com/p/ecb71343964a

 

使用 var:

每一次for循環的時候,setTimeout都執行一次, 但是里面的函數沒有被執行,而是被放到了任務隊列里面,等待執行, for循環了4次,就放了4次,當主線程執行完成后,才進入任務隊列里面執行。

 

使用 let:

for循環頭部的let不僅將i綁定到for循環塊中, 它也將其重新綁定到 **循環體的每一次迭代** 中,確保上一次迭代結束的值重新被賦值。 setTimeout里面的function()屬於一個新的域, 通過 var 定義的變量是無法傳入到這個函數執行域中的, 而通過使用 let 來聲明塊變量,這時候變量就能作用於這個塊, 所以 function就能使用 i 這個變量了; 這個匿名函數的參數作用域 和 for參數的作用域 不一樣。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM