1.声明变量的关键字
const b = 2;
console.log(a, b); //1 2
- let 命令
ES6 新增了let命令,用来声明变量。它的用法类似于var,但是所声明的变量,只在let命令所在的代码块内有效。
{
let a = 10;
var b = 1;
}
a // ReferenceError: a is not defined.
b // 1
不存在变量提升
let a = 1;
不可重复声明
let a = 2;//报错:Identifier 'a' has already been declared
暂时性死区
if (true) {
tmp = 'abc'; // ReferenceError
let tmp;
}
上面代码中,存在全局变量tmp,但是块级作用域内let又声明了一个局部变量tmp,导致后者绑定这个块级作用域,所以在let声明变量前,对tmp赋值会报错。
ES6 明确规定,如果区块中存在let和const命令,这个区块对这些命令声明的变量,从一开始就形成了封闭作用域。凡是在声明之前就使用这些变量,就会报错。
总之,在代码块内,使用let命令声明变量之前,该变量都是不可用的。这在语法上,称为“暂时性死区”(temporal dead zone,简称 TDZ)。
- const命令
只在声明所在的块级作用域内有效,const声明一个只读的常量。一旦声明,常量的值就不能改变。
const PI = 3.1415;
PI // 3.1415
PI = 3;
// TypeError: Assignment to constant variable.
如果赋值为基本类型,值为只读,不可变
改变常量的值会报错,对于const来说,只声明不赋值,就会报错
如果赋值为引用类型值,那么属性可变
a.name = 'zhangsan';
delete a.age;
console.log(a);//{name:'zhangsan'}
网友评论