为什么JavaScript在实际调用函数之前声明局部变量
Why JavaScript declares local variable before function is actually invoked?
简单示例:
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中,变量可以在使用后声明。因此,建议始终在函数的顶部声明变量。否则,可能会导致混淆案件。
相关文章:
- 如何使用php文件中的GET来获取我在.js文件中声明的变量
- Javascript用函数return替换局部变量
- 调用函数中声明的变量
- 使用在函数外部声明的变量的 Javascript 返回值 + undefined
- 如何获得一个与用“”声明的变量工作方式相同的变量;设“;或在with块中
- 每次调用函数时,都要修改Javascript中的局部变量
- 局部变量在闭包中丢失
- 是否可以在另一个变量中使用未声明的变量
- 试图将一个局部变量传递给我的ngAside控制器
- jQuery.ajax()访问javascript循环中的beforeEnd局部变量
- 局部变量的声明
- 多个局部变量声明与一个全局变量声明
- 为什么JavaScript在实际调用函数之前声明局部变量
- 当声明同名的局部变量时,函数变为未定义
- 声明局部变量
- 在文档内声明局部变量,或者在不同作用域的函数内声明局部变量
- 在声明范围之外使用局部变量;为什么会这样呢?
- 如何声明局部变量全局
- 在JavaScript中,当一个局部变量被提升时,它甚至在声明之前就已经在作用域中了吗
- 在JavaScript中声明或不声明局部变量