Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/449.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么JavaScript在实际调用函数之前声明局部变量?_Javascript_Scope - Fatal编程技术网

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

为什么JavaScript在实际调用函数之前声明局部变量?,javascript,scope,Javascript,Scope,简单的例子: var b = function (msg) { (function inn() { console.log(msg); var msg = 0; })(); } b("15"); 此代码将记录为“未定义”,因为第4行上的本地“msg”是在实际执行该行之前声明的。文档中有关于这一点的说明吗?它被称为变量提升 称为变量提升 语言规范说: 在进入执行上下文时,将在VariableEnvironment中创建绑定,如下所示…对于代码中的每个Va

简单的例子:

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

此代码将记录为“未定义”,因为第4行上的本地“msg”是在实际执行该行之前声明的。文档中有关于这一点的说明吗?

它被称为变量提升


称为变量提升


语言规范说:

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

MDN有:

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


语言规范说:

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

MDN有:

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


实际上,它将记录->
未捕获的语法错误:意外的标记)
是的,当然,我已经修复了:)现在它将记录->
未捕获的语法错误:意外的标识符
@VladLubenskiy您需要在新行或
上使用
b(“15”)
在函数callAcutally之后,它将记录->
未捕获的语法错误:意外标记)
是的,当然,我已经修复了:)现在它将记录->
未捕获的语法错误:意外标识符
@VladLubenskiy,您需要在新行或
上使用
b(“15”)