ES6 - let 和 const

56 阅读1分钟

ECMAScript 6 入门

let 和 const 命令

ES6 新增了 let 和 const 命令,都是用来声明变量。

let 与 var 相比有以下特点:

  • 块级作用域
  • 同一作用域不可重复声明
  • 不存在变量提升
  • 暂时性死区

const 与 var 相比:(let 有的特点 const 都有)

  • 声明时必须立即初始化赋值
  • 声明之后值不能发生改变

ES6 声明变量的 6 种方法:

varfunctionletconstclassimport

ES5 只有前两种方法;

顶层对象属性

顶层对象,在浏览器环境指 window 对象,在 Node 指的是 global 对象

ES5 中,顶层对象的属性全局变量 是等价的。

// 声明一个全局变量,可以在 window 对象上进行访问
var abc = "abc";
window.abc; // 'abc'

ES6 中,为了保持兼容性,规定 var 和 function 命令声明的全局变量,依旧是顶层对象的属性; let、const、class 命令声明的全局变量,不属于顶层对象的属性。

globalThis 对象

由于顶层对象在各种环境里面是不统一的:

  • 浏览器里面,顶层对象是 window,但 Node 和 Web Worker 没有 window。
  • 浏览器和 Web Worker 里面,self 也指向顶层对象,但是 Node 没有 self。
  • Node 里面,顶层对象是 global,但其他环境都不支持。

ES2020 在语言标准的层面,引入 globalThis 作为顶层对象。也就是说,任何环境下,globalThis 都是存在的,都可以从它拿到顶层对象,指向全局环境下的 this。