ES6 - let/const 介绍

举报
鹿啦啦 发表于 2020/08/31 23:13:54 2020/08/31
【摘要】 [阮一峰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

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。