我們平常用都是這樣的
for (var i = 0; i < 3; i++) {
console.log(i)
}
有時候打印i出來的是2,也有時候是按照順序打出來的,但是很不穩定。我們要操作就很麻煩,
for (let i = 0; i < 3; i++) {
console.log(i)
}
把var換成let就可以了,因爲let
聲明的變量只在它所在的代碼塊有效,
var
命令聲明的變量i
,在全局範圍內都有效,所以全局只有一個變量i
。每一次循環,變量i
的值都會發生改變,而循環內被賦給數組a
的函數內部的console.log(i)
,裏面的i
指向的就是全局的i
。也就是說,所有數組a
的成員裏面的i
,指向的都是同一個i
,導致運行時輸出的是最後一輪的i
的值,也就是 10。
如果使用let
,聲明的變量僅在塊級作用域內有效,最後輸出的是 6。
想要具體瞭解可以看這裏面介紹 https://es6.ruanyifeng.com/#docs/let