ECMAScript 6----let and const

 

此分类为学习ECMAScript 6的笔记,主要参考《ECMAScript 6 入门》

 

 

let命令,用来声明变量,所声明的变量只在let所在的代码块内有效。就是我们常说的“块级作用域”。


不存在变量提升,所以一定要在声明之后才能使用。

1 console.log(foo); // 输出undefined
2 console.log(bar); // 输出ReferenceError
3 
4 var foo = 'foo';
5 var bar = 'bar';

 暂时性死区。只要块级作用域内存在let声明的变量,该变量在该区块内就不会受到外部的影响。

1 var foo = 1;
2 
3 {
4   console.log(foo); // 输出ReferenceError
5   let foo = 2;
6 }
7 console.log(foo); // 输出1

有些死区比较隐蔽,不太容易发现

1 function foo(x = y, y = 1) {
2   console.log(x + y);
3 }
4 
5 foo(); // 输出ReferenceError

定义x时,y还没有被定义,所以会报错。如果参数是 (x = 1, y = x), 就没有问题。


  不允许重复声明。重复声明会报错

 1 // 报错
 2 function foo() {
 3   let a = 1;
 4   var a = 2;  
 5 }
 6 
 7 // 报错
 8 function foo() {
 9   let a = 1;
10   let a = 2;
11 }
12 
13 // 报错
14 function foo() {
15   var a = 1;
16   let a = 2;
17 }

 



 

const命令声明一个只读常量,声明时必须赋值,之后不可再更改。

1 const bar; // Uncaught SyntaxError: Missing initializer in const declaration
2 
3 const foo = 1;
4 
5 foo = 2; // Uncaught TypeError: Assignment to constant variable.

const命令与let命令一样,只在声明所在的代码块内有效,不提升,存在暂时性死区,并且不可重复声明。


 对于符合变量,const命令只能保证变量名指向的地址不变,不能保证该数据不变,所以声明一个对象常量时要十分小心。

1 const foo = {};
2 foo.name = 123;
3 
4 foo.name // 123
5 
6 foo = {}; // Uncaught TypeError: Assignment to constant variable.

 



 

let命令、const命令、class命令声明的全局变量,不属于顶层对象的属性,全局变量将逐步与顶层对象的属性脱钩。

1 var a = 1;
2 window.a // 1
3 
4 let b = 1;
5 window.b // undefined

 



 

ES6中,var,let,const应该如何选择

 

posted @ 2016-10-11 18:48  李啸虎  阅读(190)  评论(0编辑  收藏  举报