在ES6中允許塊級(jí)作用域的任意嵌套泌参。外層作用域無法讀取內(nèi)層作用域的變量凿试。
如
{
{let i = 1;}
console.log(i);
}
在這里因?yàn)閕是在內(nèi)層作用域被定義,外面無法讀取,所以這里會(huì)報(bào)錯(cuò)
內(nèi)層作用域可以定義外層作用域的同名變量
如
{
let i = 1
{let i= 2}
}
if語句和for語句里面的{ }也屬于塊作用域
如
for(let i = 0; i < 4; i++) {
let d = 5;
};
console.log(i);
console.log(d);
這里也是因?yàn)閴K作用域的原因?qū)е掳l(fā)生錯(cuò)誤
總的來說塊作用域的主要作用就是防止外部訪問到內(nèi)部的變量
防止變量提升導(dǎo)致內(nèi)層變量可能會(huì)覆蓋外層變量
var i = 5;
function func() {
console.log(i);
if (true) {
var i = 6;
}
}
func(); // undefined
防止用來計(jì)數(shù)的循環(huán)變量泄露為全局變量
for (var i = 0; i < 10; i++) {
console.log(i);
}
console.log(i); // 10