ES常用特性(1)——let和const
ES6概念
国际化标准组织 ECMA发布了规定浏览器脚本语言的标准,即 ECMAScript。
ECMAScript 6.0(简称ES6)新的Javascript语法标准,在2015年6月正式发布。ECMAScript和JavaScript的关系是,前者是后者的规格,后者是前者的一种实现。实际上JS是ES的扩展语言。
let
ES6新增了let命令,用来声明变量,并且只在let命令所在的代码块内有效。
- let声明的变量只在 {} 代码块内有效。
{
let name = 'ZhangSan';
}
console.log(name);//Uncaught ReferenceError: name is not defined
- let 存在变量提升,但是由于暂时性死区的存在使let不能在声明之前被使用,如果使用则会报错。
console.log(name); //Uncaught ReferenceError: name is not defined
let name = 'LiSi';
- let不允许在相同作用域内,重复声明同一个变量, 不能在函数内部重新声明参数。
let name = 'ZhangSan';
let name = 'LiSi'; //Uncaught SyntaxError: Identifier 'a' has already been declared
const
ES6新增了const命令,用来声明一个只读的常量。
- const声明时必须设置初始值。
const name; //Uncaught SyntaxError: Missing initializer in const declaration
- const声明的成员不能被修改。
const name = 'ZhangSan';
name = 'LiSi';//Uncaught SyntaxError: Identifier 'name' has already been declared
- const实际上保证的,并不是变量的值不得改动,而是变量指向的那个内存地址所保存的数据不得改动。
补充
暂时性死区
ES6 明确规定,如果区块中存在let和const命令,这个区块对这些命令声明的变量,从一开始就形成了封闭作用域。凡是在声明之前就使用这些变量,就会报错。总之,在代码块内,使用let命令声明变量之前,该变量都是不可用的。这在语法上,称为“暂时性死区”(temporal dead zone,简称 TDZ)
var命令会发生“变量提升”现象,即变量可以在声明之前使用,值为undefined。