2013-08-27 22 views
0

有人可以向我解釋下面的代碼是什麼,它是如何工作的以及爲什麼使用它?奇怪的使用括號內的功能

我不明白爲什麼該函數位於括號內或大括號後的括號內。

(function() { 
    //Some javascript code... 
}()); 

謝謝。

編輯/跟進的問題:

現在我更好地瞭解與jQuery使用時上面呢,就這個有什麼樣的影響:

 $(document).ready(function() { 

      (function() { 
       //code here 
      }()); 

     }); 
+0

用一個變量名替換你明白的位 - 函數 - 然後考慮它看起來是什麼樣子。 '(foo());' –

+0

謝謝。與jQuery示例一起使用時呢? – PostureOfLearning

回答

3

這是一個自動執行的功能。它創建一個匿名函數並立即執行它。

它可以用於很多目的,例如創建一個新的範圍。

var x = 10 
(function() { 
    var x = 5 
}()) 
alert(x) // 10 
+0

感謝您的回答。隨意對帖子中的修改發表評論。 – PostureOfLearning

3

這是一個自動執行的匿名函數。

首先是匿名函數:

(function(){ 
    //Normal code goes here 
}) 

最有意思的是,當我們在最後添加這一權利會發生什麼:

(); 

這些括號引起包含在前面的括號內的一切立即執行。

JavaScript具有功能級別範圍。在匿名函數中定義的所有變量和函數都不可用於其外部的代碼,從而有效地使用閉包來封鎖自己的外部世界。

這種設計模式對模塊化Javascript很有用。

你可以閱讀更多在這裏: What is the purpose of a self executing function in javascript?

+0

謝謝。我現在得到它...... =)也可以在我的文章中對編輯發表評論。 – PostureOfLearning

0

@doornob是正確的。但是,原始帖子中存在語法錯誤。它應該是這樣的:

(function() { 
    // your code goes here 
})(); 

雖然這通常被描述爲一個「自動執行功能」,更準確的術語是「立即調用函數表達式。」我們可以稱之爲「如果」。這是一種封閉。

這種模式通常延伸到一些所謂的模塊模式,它看起來像這樣:

var myModule = (function() { 

    var my = {}; 

    var privateFoo = 'I am foo. I am a private field!'; 

    my.publicMethodGetFoo = function() { 
     return privateFoo; 
    } 

    return my; 
})(); 

這是非常像傳統的OOP語言++類,如C或Java。使用var關鍵字聲明的屬性不能在模塊之外訪問。雖然在JavaScript中沒有訪問修飾符這些東西,但這些屬性是爲了所有意圖和目的「私有」的。

請注意,我們創建了一個名爲'my'的對象。該對象返回到模塊的末尾,這意味着它暴露於「外部世界」。因此它可以在模塊之外訪問。因此,我們添加到「我的」的任何字段或方法都將公開。

+0

謝謝尼爾。你說這是語法錯誤,但是,代碼是從工作解決方案中複製/粘貼的。你的版本和發佈版本有什麼區別? – PostureOfLearning

+0

匿名函數通常包含在一對括號中,這會使JavaScript將其評估爲與賦值相對的表達式:(function(){})隨後是一對括號,它們立即調用表達式。在你的例子中,右括號放在()後面。它很有可能可以按照您的方式正常工作。說實話我不知道。但我確實知道我寫的方式是常用的語法。 –

+0

謝謝。隨意評論該帖子的編輯。 – PostureOfLearning