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应该如何选择

 

转载于:https://www.cnblogs.com/ClassicL/p/5949837.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值