let
命令是ES6新增的命令,它和var
的用法类似,但是let
命令声明的变量只在其所在的代码块内有效。
let
是不存在变量提升的,它所声明的变量一定要在声明后使用,否则会报错。
var
命令会发生“变量提升”现象,即可以在变量声明之前使用,值为undefined
在代码块内,使用let命令声明变量之前,该变量都是不可用的。
if (true) {
// TDZ开始
tmp = 'abc'; // ReferenceError
console.log(tmp); // ReferenceError
let tmp; // TDZ结束
console.log(tmp); // undefined
tmp = 123;
console.log(tmp); // 123
}
let
不允许在相同作用域内,重复声明同一个变量。
// 报错
function func() {
let a = 10;
var a = 1;
}
// 报错
function func() {
let a = 10;
let a = 1;
}
function func(arg) {
let arg;
}
func() // 报错
function func(arg) {
{
let arg;
}
}
func() // 不报错