let and const

const 会阻止对于变量绑定与变量自身值的修改。并不会阻止对变量成员的修改

1
2
3
4
5
6
7
8
9
const person = {
name: "Nicholas"
};
// 工作正常
person.name = "Greg";
// 抛出错误
person = {
name: "Greg"
};

暂时性死区

使用 let 或 const 声明的变量,在达到声明位置之前都是无法访问的,试图访问会导致一
个引用错误,即便所用的操作通常是安全的,例如使用 typeof 运算符

1
2
3
4
if (condition) {
console.log(typeof value); // 引用错误
let value = "blue";
}
1
2
3
4
5
var x = 10;
if (true) {
x = 20; // ReferenceError
let x;
}

for循环还有一个特别之处,就是设置循环变量的那部分是一个父作用域,而循环体内部是一个单独的子作用域。

1
2
3
4
5
6
7
for (let i = 0; i < 3; i++) {
let i = 'abc';
console.log(i);
}
// abc
// abc
// abc