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

时间:2013-07-17 13:36:13

标签: javascript scope

简单的例子:

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

此代码将记录'undefined',因为第4行上的本地'msg'是在实际执行此行之前声明的。关于这个文件有什么意义吗?

2 个答案:

答案 0 :(得分:4)

它被称为变量吊装。

Here is the documentation on it

答案 1 :(得分:1)

语言规范说:10.5 Declaration Binding Instantiation

  

在输入执行上下文时,在VariableEnvironment中创建绑定,如下所示...对于代码中的每个VariableDeclaration和VariableDeclarationNoIn,请执行以下操作...调用env的CreateMutableBinding具体方法

MDN有a more readable explanation

  

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