1、let 声明的变量只在其所在代码块中有效
{ // // let a = 10; var b = 1; } //console.log(a) //Uncaught ReferenceError: a is not defined //console.log(b) //1 for(let i = 0; i < 10; i++){ console.log(i) }
2、不存在变量提升 变量要在声明后使用 否则报错
//Cannot access 'foo' before initialization //console.log(foo) let foo = 2; console.log(foo)
3、暂时性死区
//如果区块中存在let和const命令,则这个区块对这些命令声明的变量从一开始就形成封闭作用域。只要在声明之前就使用这些变量,就会报错 //在代码块内 使用let命令声明变量之前,该变量都是不可用的 称为暂时性死区 var tmp = 123; if(true){ // tmp = 'abc'; // Cannot access 'tmp' before initialization // 上面代码tmp 称为暂时性死区 let tmp; }
4、不允许重复声明
function a(arg){ let a = 10; // Uncaught SyntaxError: Identifier 'a' has already been declared // var a = 10; // 不能在函数内部重新声明参数 // Uncaught SyntaxError: Identifier 'arg' has already been declared let arg; }