2015-04-22 65 views
1

我是一種新的JS。所以如果問題太天真,請原諒我。IIFE內部的可變範圍

我有這樣一個IIFE工作:

var App = (function() { 

    var test = ''; 

    var init = function() { 
     App.test = 'test'; 
    }; 

    return { 
     init: init 
    }; 

})(); 

如果我不返回它爲什麼App.test暴露?我認爲只有返回的變量會被暴露(像App.init)。另外,如何設置App.test的值而不暴露它?

通過暴露它,我的意思是入店的IIFE外(即:瀏覽器的控制檯)提前

謝謝!

+1

因爲'App.test'是*屬性*,而不是*變量*! – Bergi

回答

3

您的App.test屬性與本地變量test中的那個匿名函數不一樣。這只是您撥打App.init()時創建的App對象的屬性。

上的任何對象,代碼可以在一般創建屬性,所以你也可以這樣做

App.favoriteColor = "blue"; 

現在,如果你正在試圖做的是保持這種test變量在封閉四周,一個私有數據存儲,那麼你的init()功能應該只是提到它,而不是直接提到「應用程序」對象的屬性:

var init = function() { 
    test = 'test'; 
} 
+0

非常感謝!這非常有幫助! – gonzalo

3

一旦運行App.init()App.test將有VA因爲你在這裏宣佈它的價值App.test = 'test';。我猜你想保留這個私有變量,所以你可能想這樣做,而不是:

var App = (function() { 

    var test = '';//this is private 

    var init = function() { 
     test = 'test';//private variable now! 
    }; 

    return { 
     init: init 
    }; 

})(); 
+0

感謝您的回答!首先標明第一個是正確的。 – gonzalo