【阮一峰ES6入门教程学习笔记】let&const

学习来源ES6入门教程

let&const

(1) 前情提要

  • ES6新增了let命令声明变量、const声明一个只读的常量。
  • let、const提出的主要原因:块级作用域。由于ES5 只有全局作用域和函数作用域,没有块级作用域,这带来很多不合理的场景,比如:
    • 内层变量可能会覆盖外层变量。
    • 用来计数的循环变量泄露为全局变量

(2) let与const的特性

  • 为JS新增了块级作用域,IIFE也变得不在必要了。

注意:for循环还有一个特别之处,就是设置循环变量的那部分是一个父作用域,而循环体内部是一个单独的子作用域。

for (let i = 0; i < 3; i++) {
let i = ‘abc’;
console.log(i);
}
// abc
// abc
// abc
上面代码正确运行,输出了 3 次abc。这表明函数内部的变量i与循环变量i不在同一个作用域,有各自单独的作用域。

  • 不存在变量提升,会出现暂时性死区。(var就有变量提升现象)
  • 不可重复声明。(var就可以重复声明)
  • 声明的全局变量或者全局常量,不再与顶层对象的属性挂钩。(var就与顶层对象的属性挂钩)

顶层对象,在浏览器环境指的是window对象,在 Node 指的是global对象。ES5 之中,顶层对象的属性与全局变量是等价的。

  • const一旦声明变量,就必须立即初始化,不能留到以后赋值。
  • const本质:const实际上保证的,并不是变量的值不得改动,而是变量指向的那个内存地址所保存的数据不得改动。简单类型数据地址和值统一,主要在于复合类型像数组对象之类的变量,引用地址不变,但其中的属性或者元素是可以改变的。

(3) globalThis对象(ES2020)

  • 前端中顶层对象在各种实现里面是不统一的,使用起来受到极大局限
    –浏览器里面,顶层对象是window,但 Node 和 Web Worker 没有window。
    –浏览器和 Web Worker 里面,self也指向顶层对象,但是 Node 没有self。
    –Node 里面,顶层对象是global,但其他环境都不支持。
  • ES2020 在语言标准的层面,引入globalThis作为顶层对象。也就是说,任何环境下,globalThis都是存在的,都可以从它拿到顶层对象,指向全局环境下的this。
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值