2010-02-10 44 views
9

使用(函數(){...})()的好處我在JQuery中注意到,下面的代碼結構是用來什麼是JavaScript中

(function(){var l=this,g,y=l.jQuery,p=l.$,...})()

這似乎是創建一個函數,並叫它。

採取這種方法與使內聯函數的內容相比有什麼好處?

+1

重複:http://stackoverflow.com/questions/592396/what-is-the-purpose-of-a-self-executing-function-in-javascript – 2010-02-10 09:53:04

+0

這一個以及:http://stackoverflow.com/questions/631187/javascript-scope-and-closure 問題是,這些問題/答案的可發現性不好。如果我所知道的只是「[javascript](function()」,那麼搜索在找到任何有用的東西時都不會很好。 – Alan 2010-02-10 19:07:21

回答

7

它創建一個閉包以防止與其他代碼部分發生衝突。看到這一點:

特別方便,如果你有一個使用$()方法的一些其他圖書館,你必須保留使用與jQuery還的能力。然後,你可以創建一個閉包像這樣:

(function($) { 
    // $() is available here 
})(jQuery); 
4

它爲變量創建一個範圍,特別是定義$例如綁定到jQuery,無論其他庫如何覆蓋它。把它看作一個匿名的命名空間。

0

它就像:

var foo = function(){var l=this,g,y=l.jQuery,p=l.$,...}; 
foo(); 

但更簡單,並且不需要一個全局變量。

0

它允許有函數內的局部變量和操作,而不必把它們轉化爲全球的。

1

通過自我調用匿名函數,您可以創建一個本地作用域,它非常高效,並且可以直接調用它自己。

你可以閱讀一下here