let和const
# let和const
以前使用var
定义变量时,会出现 以下情况
var a;
console.log(a);
a = 2;
// undefined
1
2
3
4
5
6
7
2
3
4
5
6
7
ES就提供了一个let
console.log(a);
let a = 10;
// 这里会报错
1
2
3
4
5
2
3
4
5
警告
Cannot access 'a' before initialization
告诉我们不能在使用之前初始化。
let
的特点:
声明变量、没有变量提升
是一个块级作用域
console.log(b); if (1 === 1) { // 在该作用域里 let b = 10; } // b is not defined
1
2
3
4
5
6
7
8不能重复声明
var声明的变量可以有覆盖性
let声明的变量不可以重复声明
let a = 10; let a = 2; // Identifier 'a' has already been declared
1
2
3
4
5
const
在别的语言里代表着常量,和let
也有着相似的特点,它也确实是用来声明常量的,一旦被声明,无法修改;
const声明的变量是不允许被修改的
const
声明的对象里的属性的值你可以修改,但是不能修改对象本身
const person = {
name: "无解"
}
person.name = "lalala";
console.log(person);
1
2
3
4
5
6
2
3
4
5
6
{name: 'lalala'}
1
// 错误示范
person = {
age: 20
}
// Assignment to constant variable.
1
2
3
4
5
6
2
3
4
5
6
# 案例
for循环经典案例
var arr = [];
for (var i = 0; i < 10; i++) {
arr[i] = function () {
return i; // 使用var声明的最后的i就是10
}
}
console.log(arr); // 保存了10个函数
console.log(arr[5]()); // 调用第五个函数 结果为10
1
2
3
4
5
6
7
8
9
10
2
3
4
5
6
7
8
9
10
使用let
和const
来进行修改
const arr = [];
for (let i = 0; i < 10; i++) {
// 此时只会在当前作用域里有用
arr[i] = function () {
return i;
}
}
console.log(arr); // 保存了10个函数
console.log(arr[5]()); // 调用第五个函数 使用 const和let后 结果为 5
1
2
3
4
5
6
7
8
9
10
11
2
3
4
5
6
7
8
9
10
11
不会污染全局变量
let RegExp = 10;
console.log(RegExp);
console.log(window.RegExp);
1
2
3
4
2
3
4
输出结果
10
let和const.html:37 ƒ RegExp() { [native code] }
1
2
3
4
2
3
4
提示
建议:在默认情况下使用const
,而只有在你知道变量值需要被修改的时候一定使用let
编辑 (opens new window)
上次更新: 2021/10/19, 23:26:27