2011-03-28 100 views
2

我在很多腳本這種模式的Javascript解釋這個代碼,請

(function(){})(); 

這是什麼,以及爲什麼使用它看到了什麼?

+0

這基本上是一個匿名函數。在這裏看到更多的細節http://stackoverflow.com/questions/1140089/how-does-an-anonymous-function-in-javascript-work – ashishjmeshram 2011-03-28 13:42:49

回答

4

它被用來強制創建一個本地範圍,它避免了通過聲明污染當前(通常是全局的)範圍。

它可以改寫這樣的,如果你想避免匿名函數:

var scope = function() { /*...*/ }; 
scope(); 

但匿名函數的語法具有以下優勢:父母或全球範圍甚至不是的名字poluted功能。

(function() { /*...*/ })(); 

這也是實現信息隱藏在JavaScript作爲在此範圍內聲明(函數和變量)將無法從外面看到的好辦法。但是他們仍然可以看到對方,並且在此範圍內聲明的JavaScript實現閉包函數將可以訪問同一範圍內的其他聲明。

1

這是定義一個沒有名字的函數,並立即調用它。因爲Javascript函數充當關閉 - 持久作用域 - 這是創建一組互連對象或函數的有用方法。

1

匿名函數是一個函數(或子例程),可以在不綁定標識符的情況下定義並且可能被調用。

1

這是創建閉包的基本語法。更典型的,它會包含一些代碼:

(function(){ 
    //Your Code Here 
})(); 

這相當於

var some_function = function() { 
    //Your Code Here 
}; 
some_function(); 

這樣做的最大的原因是清潔;在任何函數之外聲明的變量都是全局的;然而,這個函數內部聲明的變量包含在這個函數內部,並且不會影響函數之外的任何代碼或與之交互。將任何一種可重用插件封裝在閉包中是一種很好的做法。

1

它立即執行匿名功能。 它基本上相同:

var test = function(){}; 
test(); 

但是不需要使用額外的變量。 您需要將其包裝在其他括號中以獲取作爲表達式結果的函數 - 否則將其理解爲函數聲明,並且不能執行聲明。

它主要用於範圍保護 - 因爲JS具有功能範圍,所以在這樣的函數中定義爲var x;的每個變量都將保留在它的函數本地範圍內。

所有這些僅僅意味着'立即執行該函數中的所有內容而不會污染全局範圍'。

它也常用於衆所周知的模式,如模塊模式和揭示模塊模式。請參閱http://www.adequatelygood.com/2010/3/JavaScript-Module-Pattern-In-Depth瞭解更多詳情。

0

它被稱爲立即功能匿名閉包,是the module pattern的基礎。

它用於爲代碼創建私有本地範圍。