加载中...

变量提升(Hoisting)指 JavaScript 引擎在执行代码前的编译阶段,先扫描并登记当前作用域内的所有声明,使得声明在书写位置之前即可被引用的现象。
var 声明的变量会被提升并初始化为 undefined,因此在声明前访问不报错但值为 undefined;函数声明(function 语句)整体提升,声明前即可调用;而 let、const 与 class 虽然也会在编译期登记,但在声明语句执行前处于"暂时性死区",提前访问会抛出 ReferenceError;函数表达式与箭头函数只提升变量名,不提升函数体。
这一行为源于引擎"先创建执行上下文、再逐行执行"的两阶段模型:创建阶段完成变量对象/环境记录的登记,执行阶段才真正赋值。
变量提升容易造成直觉之外的 bug,现代规范做法是统一使用 let/const、先声明后使用,并借助 ESLint 的 no-use-before-define 等规则约束,var 已基本退出新代码。

登录 后参与讨论
暂无讨论,来发表第一条评论吧