let命令是ES6中声明变量的方式,但是和var不同,它声明的变量只在代码块中有效。
- let命令不存在变量提升,使用var命令定义变量的时候,存在“变量提升”的现象,即是变量在声明之前使用,值为undefined.例如:
//使用var定义的情况 console.log(foo); //undefined var foo = 123; //使用let定义的情况 console.log(foo); //报错,ReferrenceError let foo = 123;
- 暂时性死区 ES6中明确规定,如果在代码块中使用let或者const定义了变量,那么这个区块对于这些命令声明的变量,从一开始就形成了封闭作用域。凡是在声明前使用这些变量,就会报错。
var tmp = 345; { tmp = 123 ;//报错,referenceError let tmp = 'abc'; }
- 不允许重复说明,不能在相同作用域内,重复声明同一个变量
//报错 funciton (){ var a = 2; let a = 2; } //报错 function (){ let a = 10; let a = 11; } 不允许在函数中重复声明参数 // 报错 function f(arg){ let arg = 1; } //不报错,有自己封闭的代码块 function f(arg){ { let arg = 1; } }