用来声明变量。用法类似于 var,但却有许多不同
(1)let 声明的变量只在 let 命令所在的代码块内有效。
{
let a = 10;
var b = 1;
}
a // error:ReferenceError: a is not defined.
b // 1
(2)变量提升
// var
console.log(foo); // undefined
var foo = 2;
// let
console.log(bar); // error:ReferenceError
let bar = 2;
先打印,后声明,var 的情况显示,变量已被声明,说明发生了变量提升
而 let 情况,直接报错,说明没有发生变量提升
(3)暂时性死区
var tmp = 123;
if (true) {
tmp = 'abc'; // ReferenceError
let tmp;
}
在代码块内,使用let
命令声明变量之前,该变量都是不可用的。这在语法上,称为“暂时性死区”
(4)不允许重复声明变量
//error
function func() {
let a = 10;
var a = 1;
}
//error
function func() {
let a = 10;
let a = 1;
}
//error
function(a){
let a ;
}
在相同作用域下,不允许重复声明变量,也不能在函数内部重新声明参数
(5)顶层对象与全局变量
var a = 1;
window.a // 1
let b = 1;
window.b // undefined
var声明的全局变量,依旧是顶层对象的属性,而通过 let 声明的全局变量,不再是顶层对象的属性,也就是说,从ES6开 始, 全局变量将逐步与顶层对象的属性脱钩
End,Bye