let是es6中聲明變量的一個重要方式:其目的就是為了限制作用域提升。
塊級聲明用于聲明在指定塊的作用域之外無法通路的變量。塊級作用域(亦被稱為詞法作用域)存在于:
- 函數内部
- 塊中(字元 { 和 } 之間的區域)
塊内的可以通路塊外的,塊的兄弟之間不能通路,塊不能通路塊的子集
作用域代碼如下:可以看到無論flag是什麼,最終結果name其實是勢必被建立。
function getName(flag) {
if(flag) {
var name ="凡夫俗子";
}else {
return null
}
console.log(name) //undefined
},
//其實上述代碼因為變量提升會變為以下:
function getName(flag) {
var name
if(flag) {
name ="凡夫俗子";
}else {
return null
}
console.log(name) //undefined
},
function getName(flag) {
if(flag) {
let name ="凡夫俗子";
}else {
return null
}
console.log(name) //undefined
}
//子塊通路父塊當然是可以的
function handle() {
let i = 1;
for(i;i<9;i++) {
console.log(i)
}
}
//這個i就相當于是是聲明在了for的 { }中,在外是通路不了的
for(let i = 1;i<9;i++) {
console.log(i)
}