在看阮老師的ECMAScript 6 入門 時遇到了這個問題。先貼代碼 :var a = [];for (var i = 0; i < 10; i++) {
a[i] = function () { console.log(i);
};
}
a[6](); // 10不理解為什么是10,書中是這樣解釋的。變量i是var聲明的,在全局范圍內都有效。所以每一次循環,新的i值都會覆蓋舊值,導致最后輸出的是最后一輪的i的值。先假設是覆蓋了,那為什么是10,為什么不是9, 不是 i < 10 嗎?還有這個let的用法var a = [];for (let i = 0; i < 10; i++) {
a[i] = function () { console.log(i);
};
}
a[6](); // 6let聲明 i , 就得到了6,這是為什么啊?書中是這樣解釋的。變量i是let聲明的,當前的i只在本輪循環有效,所以每一次循環的i其實都是一個新的變量,所以最后輸出的是6。整理下問題 :1.用var聲明的為什么結果是10,就算不是6,也該是9啊,因為循環是從0-9.2.用let聲明的為什么是6?
javascript let和var的用法
素胚勾勒不出你
2018-08-10 09:06:58
