ES6 - let/const 介绍
【摘要】 [阮一峰ES6/let](https://es6.ruanyifeng.com/#docs/let)ES6 声明变量的六种方法ES5 只有两种声明变量的方法:var命令和function命令。ES6 添加let和const 命令, import 命令和 class 命令。所以,ES6 一共有 6 种声明变量的方法。顶层对象ES5 之中,顶层对象的属性与全局变量是等价的。ES6 开始,全局变量...
[阮一峰ES6/let](https://es6.ruanyifeng.com/#docs/let)
ES6 声明变量的六种方法
ES5 只有两种声明变量的方法:var命令和function命令。
ES6 添加let和const 命令, import 命令和 class 命令。
所以,ES6 一共有 6 种声明变量的方法。
顶层对象
ES5 之中,顶层对象的属性与全局变量是等价的。
ES6 开始,全局变量将逐步与顶层对象的属性脱钩。
var a = 1; // 如果在 Node 的 REPL 环境,可以写成 global.a // 或者采用通用方法,写成 this.a window.a // 1 let b = 1; window.b // undefined
[ES2020](https://github.com/tc39/proposal-global) 在语言标准的层面,引入`globalThis`作为顶层对象
let
let声明的变量只在它所在的代码块有效,块级作用域
适用场景
for循环
注意
for循环还有一个特别之处,就是设置循环变量的那部分是一个父作用域,而循环体内部是一个单独的子作用域
for (let i = 0; i < 3; i++) { let i = 'abc'; console.log(i); } // abc // abc // abc
特性
- 不存在变量提升
- 暂时性死区
- 不允许重复声明
- 块级作用域
1. 不存在变量提升,
应先声明后使用,否则报错
// var 的情况 console.log(foo); // 输出undefined var foo = 2; // let 的情况 console.log(bar); // 报错ReferenceError let bar = 2;
2.暂时性死区
只要块级作用域内存在let命令,它所声明的变量就“绑定”(binding)该区域,不再受外部的影响。
如果区块中存在let和const命令,这个区块对这些命令声明的变量,从一开始就形成了封闭作用域。凡是在声明之前就使用这些变量,就会报错
var tmp = 123; if (true) { tmp = 'abc'; // ReferenceError let tmp; }
暂时性死区有以下需要注意
typeof不再是一个百分之百安全的操作。
typeof x; // ReferenceError let x;
隐藏的死区
function bar(x = y, y = 2) { return [x, y]; } bar(); // 报错
3. 不允许重复声明
4. 块级作用域
const
1. 一旦声明常量值不能改变
2. 声明时要赋值
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)