Hoisting 是 JavaScript 在编译阶段将 declarations 移到其作用域顶部的行为,这发生在任何代码运行之前。但是如何 hoisted 某个东西取决于声明类型。
js
.(a);
a = ;
();
() { .(); }
.(b);
b = ;
var:声明被 hoisted 并初始化为 undefined。因此,提前读取它会得到 undefined,而不是错误。function 声明:完全 hoisted — 你可以在定义行之前调用它们。let / const:hoisted 但未初始化。它们从块的开始到声明行一直处于 Temporal Dead Zone (TDZ) 中;在 TDZ 中访问它们会抛出 ReferenceError。const f = () => {})不能提前调用 — 只有 const/var 绑定被 hoisted,函数没有。Hoisting 解释了