ES6新的变量声明方式:let和const
简介
ES5 只有两种声明变量的方法:var 命令和 function 命令。let 和 const 是ES6新增的用来声明变量的命令,语法与 var 基本一致。
ES6 除了添加针对基本数据类型的 let 和 const 命令,另外还有两种声明变量的方法:import 命令用于模块化引入;class 命令用于声明类。
所以,ES6 一共有 6 种声明变量的方法。
let id = 1;
const arr = [1, 2, 3];
let 和 const 的共同特点(与var的区别)
let 和 const 优化了变量声明,解决了一些 var 声明存在的问题,两个命令共同具备以下特点:
1、块级作用域
ES5 只有全局作用域和函数作用域,没有块级作用域,这带来很多不合理的场景。为了解决这些问题,let 和 const 实现了 JavaScript 中的块级作用域。
var 声明的变量作用域是全局,而 let 和 const 声明的变量作用域只存在于声明该变量的代码块{}
的内部。
{
var id = 1
}
console.log(id) // 1
// 将var替换成let或const
{
let id = 1
console.log(id) // 1
}
console.log(id) // undefined
2、不属于顶层对象
let 与 const 声明的全局变量不是顶层对象window的属性。
var 声明的变量属于顶层对象window,因此可以通过 window. 变量名来访问这些变量,而 let 和 const 声明的变量不能这样访问。
var a = 5
console.log(window.a) // 5
let a = 5
console.log(window.a) // undefined
3、不允许重复声明
var 可以重复声明变量,后声明的变量会覆盖之前声明的同名变量,而let 和 const 不允许重复声明,出现重复声明时会直接报错。
var id = 1;
var id = 2;
console.log(id) // 2
let id1 = 3;
let id1 = 4;
console.log(id1)
// 报错:Identifier 'id1' has already been declared
4、出现暂时性死区
ES6 明确规定,如果区块中存在 let 和 const 命令,这个区块对这些命令声明的变量,从一开始就形成了封闭作用域。凡是在声明之前就使用这些变量,就会报错。
var id = 1
if (true) {
id