2016-07-07 21 views
1

這是什麼之間的區別:此這個自動執行匿名函數和這個正常函數調用有什麼區別?

(function() { 
    var Person = { 
     sayHello: function() { 
      alert('Hello World'); 
     } 
    } 

    Person.sayHello(); 
})(); 

和:除了後者創建一個公開的功能,前者是創造一種私有函數的(你不能引用人的途徑

var Person = { 
    sayHello: function() { 
     alert('Hello World'); 
    } 
} 

Person.sayHello(); 

在括號之外...有什麼區別?

+0

第一個執行它,第二個不執行。 –

回答

8

第一個不會留下一個名爲Person的變量,它在當前範圍內浮動(因爲當第e IIFE結束執行),也不會覆蓋該範圍內稱爲Person的任何其他變量。

(第二個缺少},但我認爲這是問題中的拼寫錯誤)。

2

第一個有Person變量私有。一旦執行,它將丟棄SE功能中的所有內容。

2

第一版本創建「孤立命名空間」,所以如果你在你的代碼有專人變量的地方,那麼就不會被覆蓋

第2版在全球範圍內創造的人,所以可能會導致與您的代碼的其他地區的衝突

more info

1

第一個是自動執行的匿名函數,這意味着在沒有定義什麼是它的訪問之外,它什麼時候執行,everyth它裏面是「失去」

爲了能夠打電話給你必須該功能以外的sayHello()方法暴露對象者到全局「窗口」對象

​​

第二個是含有一個對象變量,並且由於該變量在全局範圍內聲明,所以可以從任何地方訪問,並且可以創建新的方法和屬性以及對象的實例。

相關問題