2017-02-14 102 views
0

圍繞Web的許多不同文章都聲稱在設計模塊(類似於jQuery)時使用全局導入的巨大優勢。全局導入變量和IIFE

所以,做這樣的事情......

(function(globalVariable){ 
    globalVariable.printStuff = function(){ 
    console.log(‘Hello World’) 
    }; 
}(globalVariable)); 

...意味着我可以調用一個函數是這樣的:

globalVariable.printStuff(); 

的問題是,每當我運行這個在控制檯中,我不斷收到:

globalVariable undefined 

我的問題是,我到底需要聲明這個變量,我可以得到這個工作?

+1

什麼用'globalVariable.printStuff()是高達{/ *這是什麼連? * /};'? – Phil

+3

雖然它不是解決方案,但要注意''Hello World'''''''''''''''''''''''''''''''''''''''''''''''。另外,你是否真的定義了一個名爲'globalVariable'的變量,並傳遞給你的IIFE? – haxxxton

+0

我希望此函數中的所有函數不污染全局名稱空間並最大限度地減少與其他腳本的衝突。所以,我希望擁有像globalVariable這樣的東西可以讓我定位這些私人功能。 – Modermo

回答

1

對於這樣一個真正的單模,你不需要任何IIFE。只寫一個對象文字:

var globalVariable = { 
    printStuff: function() { 
     console.log('Hello World'); 
    } 
}; 

globalVariable.printStuff(); 

如果你想使用一個IIFE範圍,你仍然需要在某處創建對象。這可能是在模塊內部還是外部的:

var globalVariable = (function() { 
    var module = {}; 
    var localVariable = 'Hello World'; 
    module.printStuff = function() { 
     console.log(localVariable); 
    }; 
    return module; 
}()); 

globalVariable.printStuff(); 

var globalVariable = {}; 

(function(module) { 
    var localVariable = 'Hello World'; 
    module.printStuff = function() { 
     console.log(localVariable); 
    }; 
}(globalVariable)); 

globalVariable.printStuff(); 
+0

就是這樣!我試圖將globalVariable聲明爲'var globalVariable;'。爲什麼它需要定義爲一個對象? – Modermo

+0

因爲你想創建它的屬性... – Bergi

+0

當然:)現在有道理。感謝澄清。 – Modermo

0

對於瀏覽器window對象是存儲所有全局變量的對象。下面的代碼顯示了具有全局變量的IIFE的基本實現。

//Set a variable 'globalVariable' in the window object 
 
window.globalVariable = 10; 
 

 
//Access the global variable 'globalVariable' in IIFE 
 
(function(globalVariable) { 
 
console.log(globalVariable); 
 
})(globalVariable);

+0

爲什麼我要這麼做? – 2017-02-14 05:03:00

+0

我的目的是向你解釋全局變量如何在使用IIFE的JavaScript中工作 –