1. 程式人生 > >var和let定義變數在迴圈中的不同

var和let定義變數在迴圈中的不同

var arr = [];
for(var i=0; i<10; i++) {
    arr[i] = function () {
    console.log(i); 
}   
}
console.log(arr[5]())   //10

輸出結果為10;就是作用域的問題。使用var 定義變數的時候,在整個迴圈中是全域性的,每一次的迴圈實際上是為i賦值,迴圈一次賦值一次,10次迴圈完成,i最後的結果賦值就為10;取arr[5]的值,就是被最終賦值的i,就是10;
可以使用let定義變數i;let的作用局的塊級作用局,即每次迴圈的i的作用域就是本次迴圈,下一次迴圈重新定義變數i;所以arr[5]()的輸出就是5;