为什么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”)
函数调用后的代码>