ECMAScript 6(var / let / const)
什么是ES6 ?
ECMAScript 6.0(以下简称ES6)是JavaScript语言的下一代标准,已经在2015年6月正式发布了。
它的目标,是使得JavaScript语言可以用来编写复杂的大型应用程序,成为企业级开发语言。
标准的制定者有计划,以后每年发布一次标准,使用年份作为版本。因为ES6的第一个版本是在2015年发布的,所以又称ECMAScript 2015(简称ES2015)。
ECMAScript和JavaScript的关系是,前者是后者的规格,后者是前者的一种实现(另外的ECMAScript方言还有Jscript和ActionScript)。日常场合,这两个词是可以互换的。
var声明普通变量
// 1 var 声明的变量,可以提升
{
var a = 10;
}
console.info(a); // 10
// 2 允许重复声明
var b = 20;
var b = 30
console.info(b); // 30
// 3 允许重新赋值
b = 40;
console.info(b); //40
// 4 允许只声明不赋值
var c;
console.info(c); //undefined
let 声明局部变量(块级变量)
代码块内有效 ES6新增了let命令,用来声明变量。
它的用法类似于var,但是所声明的变量,只在let命令所在的代码块内有效。
// 1 let声明的变量,不允许变量提升
{
let a = 10;
}
console.info(a); //异常, a is not defined
// 2 存在暂时性死区 : 在块代码中,所有的变量都是局部变量 (必须先声明,再使用)
var b = 10;
{
console.info(b); // b is not defined
let b = 20;
}
//3 不允许重复声明
var c = 10;
let c = 20; //Identifier 'c' has already been declared (变量c已经声明了)
//4 允许重新赋值
let d = 10;
d = 20;
console.info(d);
//5 允许只声明不赋值
let e;
console.info(e); //undefined
声明常量:const
const声明一个只读的常量。一旦声明,常量的值就不能改变。
使用const命令声明变量,此变量必须立即初始化,不能留在后面赋值。否则会报错。
const的作用域与let命令相同:只在声明所在的块级作用域内有效。
//1. 不允许提升
{
const b = 10;
}
console.info(b) //b is not defined
//2. 存在暂时性死区
var c = 10;
{
console.info(c) //c is not defined const c = 20;
}
//3. 不允许重复声明
const a = 10;
const a = 20; //Identifier 'a' has already been declared
//4. 不允许重新赋值
const a = 10;
a = 20; //Assignment to constant variable.
//5. 不允许只声明不赋值
const d; // Missing initializer in const declaration
变量声明:总结
关键词 | 是否存在变量声明 | 是否存在暂时性死区 | 是否允许重复声明 | 是否允许只声明不赋值 |
---|---|---|---|---|
var | 存在 | 不存在 | 允许 | 允许 |
let | 不存在 | 存在 | 不允许 | 允许 |
const | 不存在 | 存在 | 不允许 | 不允许 |