阮一峰-let和const命令

1.let命令

ES6 新增了let命令,用来声明变量。它的用法类似于var,但是所声明的变量,只在let命令所在的代码块内有效,for循环的计数器,就很合适使用let命令。

不存在变量提升:

  • var可以先使用(值为undefined),然后再声明
  • let不行,一定要在声明后使用,先使用会报错

暂时性死区:

只要块级作用域内存在let命令,它所声明的变量就“绑定”(binding)这个区域,不再受外部的影响。

不允许重复声明

let不允许在相同作用域内,重复声明同一个变量,因此,不能在函数内部重新声明参数。

function func(arg) {
  let arg;
}
func() // 报错

function func(arg) {
  {
    let arg;
  }
}
func() // 不报错

2.块级作用域

let实际上为 JavaScript 新增了块级作用域

  • ES6 允许块级作用域的任意嵌套。
  • 内层作用域可以定义外层作用域的同名变量。
  • 块级作用域的出现,实际上使得获得广泛应用的匿名立即执行函数表达式(匿名 IIFE)不再必要了。

块级作用域与函数声明

  • 允许在块级作用域内声明函数。
  • 函数声明类似于var,即会提升到全局作用域或函数作用域的头部。
  • 同时,函数声明还会提升到所在的块级作用域的头部。
  • let只能出现在当前作用域的顶层

3.const命令

  • 声明一个可读的常量。一旦声明就不可以改变
  • 因为一旦声明就不可以改变,所以一旦声明要立马初始化
  • const的作用域与let命令相同:只在声明所在的块级作用域内有效。

本质

  • 如果真的想将对象冻结,应该使用Object.freeze方法。

ES6 声明变量的六种方法

ES5: var function

ES6:let const import class

4.顶层对象的属性

  • 顶层对象,在浏览器环境指的是window对象,在 Node 指的是global对象。ES5 之中,顶层对象的属性与全局变量是等价的。
  • 从es6开始,只有var和function命令声明全局变量,let const class声明的全局变量不属于顶层对象属性(不是windows的)


5.globalThis

  • 浏览器里面,顶层对象是window,但 Node 和 Web Worker 没有window
  • 浏览器和 Web Worker 里面,self也指向顶层对象,但是 Node 没有self
  • Node 里面,顶层对象是global,但其他环境都不支持。
  • 任何环境下,globalThis都是存在的,都可以从它拿到顶层对象,指向全局环境下的this

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值