存储在IIFE中声明的变量在哪里?

时间:2016-12-24 23:46:01

标签: javascript

在以下示例中

var foo = "bar;

(function () {    
    var hello = "world";
    debugger;
}());

变量foo在全局范围内声明,因此它成为window的属性,表达式window.foo返回" bar"。

如果我停在 iife 的断点处并在终端中输入hello,它将返回world。

但是哪个对象是变量hello存储在?

2 个答案:

答案 0 :(得分:2)

它的本地范围仅限于匿名函数

除非指定它不会与任何对象相关联。在您的代码中,它独立存在为hello本身,并且不能在该函数旁边访问

var foo = "bar;

(function () {

    var hello = "world";
    debugger;

}());

如果您希望它与任何对象相关联,您可以将其作为



var foo = "bar";
var obj={};

(function () {
  obj.hello="world";
console.log(obj.hello);
})()
console.log(obj.hello);




希望这有帮助

答案 1 :(得分:0)

全局范围变量是向NodeJS中的全局对象windowglobal添加属性的语法糖:var a = 11;window.a = 11;相同。

局部变量如何存储在内存中是一个具体的JavaScript运行时实现细节。我不介意如何存储,因为它对像JavaScript这样的高级语言没兴趣。它们只是变量,就像任何其他旧的或现代的编程语言一样。

也许您会发现这个其他Q& A是了解有关JavaScript范围的更多信息的好资源:What is the scope of variables in JavaScript?