ECMAScript6-1
1、let与const
ES205(ES6)新增两个重要的JavaScript关键字:let和const
let声明的变量只在let命令所在的代码块内有效,const声明一个只读的常量,一旦声明,其值就不能改变
1.1、let命令
let命令有以下特点:
(1)代码块内有效
ES2015(ES6)新增加了两个重要的Javascript关键字:le't和const。llet声明的变量只在let所在的代码块中有效,
const声明一个只读的常量,一旦声明,常量的值不能改变
{ let a = 1; var b = 2; console.log(a);//输出1 console.log(b);//输出2 } console.log(a);//报错 ReferenceError: a is not defined console.log(b);//输出2
(2)不能重复赋值
let只能声明一次,var可以声明多次:
let a = 1; let a = 2;//报错 Identifier 'a' has already been declared var b = 3; var b = 4; console.log(a); console.log(b);//输出4
(3)不存在变量提升
let不存在变量提升,var会变量提升
console.log(a); //ReferenceError: a is not defined let a = "apple"; console.log(b); //undefined var b = "banana";
(4)暂时性死区
var tmp = 123; if (true) { tmp = 'abc'; // ReferenceError let tmp; }
ES6 明确规定,如果区块中存在let和const命令,这个区块对这些命令声明的变量,从一开始就形成了封闭作用域。凡是在声明之前就使用这些变量,就会报错。
1.2、const命令
const 声明一个只读变量,声明之后不允许改变。意味着,一旦声明必须初始化,否则会报错。
基本用法:
const P = "3.1415926"; console.log(p) // 3.1415926 const M; // 报错 SyntaxError: Missing initializer in const declaration
const声明的变量不得改变值,这意味着,const一旦声明变量,就必须立即初始化,不能留到以后赋值。
const foo; // 报错 SyntaxError: Missing initializer in const declaration
上面代码表示,对于const来说,只声明不赋值,就会报错。
const的作用域与let命令相同:只在声明所在的块级作用域内有效。
if (true) { const MAX = 5; } MAX // Uncaught ReferenceError: MAX is not defined
const命令声明的常量也是不提升,同样存在暂时性死区,只能在声明的位置后面使用
if (true) { console.log(MAX); // ReferenceError const MAX = 5; }
上面代码在常量MAX声明之前就调用,结果报错。const声明的常量,也与let一样不可重复声明
var message = "Hello!"; let age = 25; // 以下两行都会报错 const message = "Goodbye!"; const age = 30;
暂时性死区:
var P = 1; if(true){ console.log(P); //报错 ReferenceError: PI is not defined const PI = 2; }
代码块内如果存在 let 或者 const,代码块会对这些命令声明的变量从块的开始就形成一个封闭作用域。代码块内,在声明变量 P之前使用它会报错。