在最外層宣告的時候,兩者都會是global scope,除此之外let範圍只在' { } ' block內部, 需要注意的是若是let使用為迴圈的遞增或遞減變數,每次執行迴圈的該變數都是獨立的scope,var 則是以function為層級
2、let不會hoist
var 的宣告會hoist,let不會
來看例子:
function test ( ) {
//alert(y)可正常運作
//alert(x)會出錯,x is not defined
for(var i=0 ; i<2 ; i++ ) {
//alert(y)可正常運作
//alert(x)會出錯,x is not defined
let x;
var y;
//alert(x)可正常運作
}
}
迴圈的情況
for (let i = 1; i <6; i++) {
setTimeout(function() {
console.log(i)
}, i * 1000)
}
每次的i都是獨立的
對照組
for (var i = 1; i <6; i++) {
setTimeout(function() {
console.log(i)
}, i * 1000)
}
是同一個i
迴圈的情況
for (let i = 1; i <6; i++) {
setTimeout(function() {
console.log(i)
}, i * 1000)
}
每次的i都是獨立的
對照組
for (var i = 1; i <6; i++) {
setTimeout(function() {
console.log(i)
}, i * 1000)
}
是同一個i
沒有留言:
張貼留言