为什么JavaScript在实际调用函数之前声明局部变量

Why JavaScript declares local variable before function is actually invoked?

本文关键字:声明 局部变量 函数 调用 JavaScript 为什么      更新时间:2023-09-26

简单示例:

var b = function (msg) {
   (function inn() {
       console.log(msg);
       var msg = 0; 
   })();
} b("15");

此代码将记录"undefined",因为第4行的本地"msg"是在实际执行该行之前声明的。文件中有关于这方面的要点吗?

它被称为可变吊装。

这是关于它的文档

语言规范说:10.5声明绑定实例化:

在进入执行上下文时,将在VariableEnvironment中创建绑定,如下所示…对于代码中的每个VariableDeclaration和VariableDeclarationNoIn d…调用env的CreateMutableBinding具体方法

MDN有一个更可读的解释:

在JavaScript中,变量可以在使用后声明。因此,建议始终在函数的顶部声明变量。否则,可能会导致混淆案件。