2016-12-24 75 views
2

在下面的例子存储在IIFE中声明的变量的位置?

var foo = "bar; 

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

变量foo是全球范围内声明,因此变得的window一个属性和表达window.foo返回“栏”。

如果我停在终端中的Iff和类型hello的断点处,它将返回世界。

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

+2

将有局部范围仅限于匿名函数 – Geeky

+0

肯定,但它是一个变量引用? – Lev

+0

它将在函数中被本地引用为“hello”,但它不会从匿名函数外部可见。 –

回答

2

除非它不会与任何object.In你的代码它为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);

希望这有助于

+0

实际上,您不需要将obj作为参数传递给IIFE,因为可以从函数声明内部访问全局范围。 – Lev

+0

是的,你的权利..我已经相应修改 – Geeky

0

全球范围变量将属性添加到该的NodeJS全局对象windowglobal的语法糖:var a = 11;是一样的window.a = 11;

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

也许你会发现这个其他Q &一个一个很好的资源,以了解更多关于JavaScript的作用域:What is the scope of variables in JavaScript?