let 和 const 命令
ES6 新增了 let 和 const 命令,都是用来声明变量。
let 与 var 相比有以下特点:
- 块级作用域
- 同一作用域不可重复声明
- 不存在变量提升
- 暂时性死区
const 与 var 相比:(let 有的特点 const 都有)
- 声明时必须立即初始化赋值
- 声明之后值不能发生改变
ES6 声明变量的 6 种方法:
var,function,let,const,class,import
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。