很明显这三者都是用来声明变量的,var我们最为熟悉,因为它是最常用的声明变量方法,但是在ES6里面,我们也可以用let和const来声明变量,下面我们来分析一下区别:
- 首先在javascript中我们通常使用var会发生变量提升,即脚本开始运行时,变量已经存在了,但是没有值,所以会输出undefined;而let不会发生变量提升,这表示在声明它之前,变量是不存在的,这时如果用到它,就会抛出错误。
- 其次var是函数级作用域,但是let是块级作用域.例:
1
2
3
4
5
6
7
8
9function test() {
var a = [];
for (var i = 0;i < 10; i++) {
a[i] = function() {
console.log(i);
}
}
}
a[4](); //10
但是如果将var i=0换成let i=0;最后输出就是4.总的来说let的声明比var声明条件更高一点,更安全,更不至于变量外泄。
- let不允许在相同作用域内,重复声明同一个变量,否则会报错.
- const声明一个只读的常量。一旦声明,常量的值就不能改变,这是const最主要的一个特点。
1
2const a = 1;
a = 2;
会报错.
- const命令声明的常量也是不提升,只能在声明的位置后面使用。如果只const a然后console.log(a)会报错。
- const声明的常量,也与let一样不可重复声明。
- 对于复合类型的变量,变量名不指向数据,而是指向数据所在的地址。const命令只是保证变量名指向的地址不变,并不保证该地址的数据不变,所以将一个对象声明为常量必须非常小心。
1
2
3
4const t = {};
t.p = 1;
console.log(t.p); // 1
t = {}; // 报错