{
let b=1
}
console.log(b)//Uncaught ReferenceError: a isnot defined
在for循环中,循环语句部分是一个作用域,内部又是一个作用域
for(let a=1;a<3;a++){
let a='aaa';
console.log(a)//'aaa','aaa'
}
不存在变量提升
暂死性死区
在let声明变量完成前,对变量赋值会出错
let不允许在相同作用域内,重复声明同一个变量。
块级作用域
es中模仿块级作用域
(function(){
}())
(function(){
})()
es6中
functionf1() {let n = 5;
if (true) {
let n = 10;
}
console.log(n); // 5
}
es6允许作用域任意嵌套
块级作用域与函数声明
// 情况一if (true) {
functionf() {}
}
// 情况二try {
functionf() {}
} catch(e) {
// ...
}
这两种情况都是不好的,该用函数表达式
// 浏览器的 ES6 环境functionf() { console.log('I am outside!'); }
(function() {if (false) {
// 重复声明一次函数ffunctionf() { console.log('I am inside!'); }//提升
}
f();
}());
// Uncaught TypeError: f is not a function