相同点:声明变量。
不同点:
1、let声明的变量只在let命令所在的代码块内有效。
for (var i=0; i<5; i++){
var a = 1;
let b = 2;
}
alert(a); //打印出 1;
alert(b); //报错 b is not defined;
2、let不存在变量提升。
console.log(a);
var a = 2; //打印 undefind(定义了未赋值)
console.log(b);
let b = 3; //报错。b is not defined(未定义)
3、let会造成暂时性死区。
var a = 2;
if (true) {
a = 'a';
let a; //报错。a is not defined.
}
4、let不允许在相同的作用域内重复声明同一个变量。
function() {
var a = 10;
let a = 1;
}
function() {
let a = 10;
let a = 1;
}
因此,不能在函数内部重新声明参数。
function func(a) {
let a; // 报错
}
function func(a) {
{
let a; // 不报错
}
}