2017-04-04 39 views
1

我得知IIFE用於防止污染全局名稱空間。我不明白的是,假設你有一個共享相同名稱的變量,如果你要在一個給定函數內使用關鍵字var來聲明一個變量,那麼在運行時函數被調用時無關緊要時間? 我可能使它聽起來比它更復雜的,但看看下面的代碼塊:立即在Javascript中調用函數表達式(IIFE)用例

例1:沒有IIFE

var firstName = "eugene"; 
 

 
function name(){ 
 
    var firstName = "bobby"; 
 
    console.log(firstName); 
 
} 
 
name(); //bobby 
 

 
console.log(firstName); //eugene

示例2:使用IIFE

var firstName = "eugene"; 
 

 
(function(){ 
 
    var firstName = "bobby"; 
 
    console.log(firstName); 
 
})(); 
 

 
console.log(firstName);

例2輸出基本相同的東西。使用IIFE的要點是什麼?如果它將出現同樣的事情?

+0

這個問題有很多例子已經在堆棧上。 http://stackoverflow.com/questions/14317998/immediately-invoked-function-expression-iife-vs-not – SoEzPz

+0

[名稱IIFE和立即調用名稱函數之間的區別?](http:// stackoverflow .com/q/15688420/1048572) – Bergi

+0

它只是一個被稱爲immedaitely的函數。爲什麼它需要有一個點?它做它做的事情。 –

回答

0

的IIFE的角度來看,這可能(應該 - 雖然the name doesn't hurt)也已經被寫成

(function() { 
//  ^anonymous 
    var firstName = "bobby"; 
    console.log(firstName); 
})(); 

是在全球範圍內不引入name。在第一個例子中,您可以根據需要調用name()兩次或多次。

+0

糟糕,那是一個錯字。 – ginop86

+0

啊,我明白你在說什麼。 – ginop86

-1

如果函數是非IIFE的,你必須調用該函數,如果它是一個IIFE函數,則不需要該函數調用該函數在創建後立即執行。

+0

但是......根據定義,iife是......被稱爲......這不是一個區別。 –

相關問題