{}块级作用域,作用域之间互不影响(不管是父子还是孙子什么的,不像函数作用域,儿子没有可以找父亲要)
let 解决var的变量提升问题,让变量安安分分地呆在自己的位置(可以不用闭包和立即执行函数了)
1.let与{}一起,先声明再使用,不然会报错(Temp Dead Zone)
2.let只认{},出了{}使用,报错。
{
//console.log(a) 报错
let a=1
//console.log(a) 1
{
//console.log(a) 报错
let a=2
//console.log(a) 2
{
//console.log(a) 报错
let a=3
//console.log(a) 3
}
}
}
const与let差不多,唯一区别:const只能赋值一次——常量——声明的时候必须赋值。
for(let i=0;i<6;i++){//i的作用域只在括号里面(),花括号{}里面是访问不到i的
}
以下语句会产生 let 使用的作用域:
for; if; switch;try/catch/finally。
暂时性死区
只要块级作用域内存在let命令,它所声明的变量就“绑定”(binding)这个区域,不再受外部的影响。
var tmp = 123;
if (true) {
tmp = 'abc'; // ReferenceError
let tmp;
}