前言
本文主要介绍了ES6中var、const、let的使用和区别
基本介绍
let
- let声明变量
const
- const :声明常量
- const声明的常量可以修改,但不能重新赋值
如:以下代码是正确的:
//引用数据类型
const info ={
name:'Candy'
};
info.name='June';
而下面的代码是错误的:
//基本数据类型
const test ='hello';
test='world';
var
- 声明变量
- let替代了var去声明变量
三者的区别
1、重复声明
- 重复声明:即已经存在的变量或常量,又声明了一遍
- var允许重复声明,而let、const 不允许
- 举例:
function func(a){
let a=1;
}
func();
上述的代码会报错,因为变量a进行了2次声明,一次是在函数的形参处,另一处是在函数的内部进行了变量a的声明,因此会报错。
2、变量提升
- var会提升变量的声明到当前作用域的顶部
- 举例
代码1:
console.log(a)
var a=1;
因为var会提升变量的声明到当前作用域的顶部,因此代码1等价于:
var a;
console.log(a)
a=1;
因此输出结果为: undefined
3、暂时性死区
- 只要作用域内存在let、const,它们所声明的变量或常量就自动“绑定”这个区域,不再受到外部作用域的影响
let a = 2;
function func){
console.log(a)
let a=1;
}
func();
分析:上述代码会报错
- 首先,函数只有被调用的时候才会形成函数作用域;
- 在函数里面声明了变量let a,因此变量a就会自动绑定func函数的作用域;
- 执行函数里面的console语句的时候,由于变量a已经绑定了函数作用域,因此不再受到外部作用域的影响,即不使用函数外面的变量a的值,而输出a的时候还没对a进行声明和赋值,因此会报错。
4、块级作用域
- var 没有块级作用域,而 let、const有块级作用域
- 举例
代码1:
for (var i=0;i<3;i++){
// console.log(i)
}
console.log(i)
结果:
代码2:
for (let i=0;i<3;i++){
// console.log(i)
}
console.log(i)
结果:
分析:
上述代码的块级作用域是指函数花括号之间的区域;由于var 没有块级作用域,因此在函数外的console语句能够正常执行;而 let、const有块级作用域,因此函数外的console语句会报错。