關於let 和 var 的作用域問題


直接來一個經典案例:

// 1. 下面的結果是什么? 為什么?
for (var i=0;i<5;i++){
    setTimeout(function () {
        console.log(i)

    },1000)
}

setTimeout是異步執行的,1000毫秒后向任務隊列里添加一個任務,只有主線上的全部執行完才會執行任務隊列里的任務,

所以當主線程for循環執行完之后 i 的值為5,

這個時候再去任務隊列中執行任務,i全部為5;

每次for循環的時候setTimeout都會執行,但是里面的function則不會執行被放入任務隊列,因此放了5次;for循環的5次執行完之后不到1000毫秒;

1000毫秒后全部執行任務隊列中的函數,所以就是輸出五個5啦

假如把var換成let,那么輸出結果為0,1,2,3,4;

因為let i 的是區塊變量,每個i只能存活到大括號結束,並不會把后面的for循環的 i 值賦給前面的setTimeout中的i;

而var i 則是局部變量,這個 i 的生命周期不受for循環的大括號限制;


免責聲明!

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



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