2016-12-24 80 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?