2010-05-28 181 views
23

以下假設是否準確?jquery匿名函數聲明的含義

1)立即執行

(function(){ 
})(); 

2)上執行文件準備

$(document).ready(function(){ 
}); 

3)的簡寫用在文檔準備

$(function(){ 
}); 

4)替代簡寫上文件準備用於避免交叉腳本衝突

(function($) { 
})(jQuery); 
+1

最後一個常用於定義插件。 – 2010-05-28 17:08:43

+0

編輯你的編號給它更好的代碼格式,降價不喜歡直接在數字之下的代碼,無論出於何種原因:) – 2010-05-28 17:14:04

+0

乾杯尼克,很好的 – 2010-05-28 17:19:22

回答

19

是你的定義是正確的,第3 :)

雖然,除非你需要一個封閉,一個語句將立即執行,沒有理由把它包起來像#1(當然也有很多有效的時間你需要關閉,只是注意如果你不......這是多餘的)。然而

4號是不正確的,(function($) { })(jQuery);不依賴於任何情況下,它只是一個封閉,使$ === jQuery裏面的,所以你可以使用$快捷:

(function($) { 
    //You may use $ here instead of jQuery and it'll work...even if $ means 
    //something else outside of this closure, another library shortcut for example 
})(jQuery); 
+0

非常豐富的答案。 Number 4主要用於防止自$ jquery文件被加載後在全局範圍內覆蓋$! – 2010-05-28 17:26:38

+4

@ yaya3 - 是的,通常是['.noConflict()'](http://api.jquery.com/jQuery.noConflict/)讓另一個庫控制'$'的結果。但是,如果你想'document.ready'並且沒有衝突,那麼也有一個簡短的版本,jQuery將它自己作爲參數傳遞給ready處理程序,所以'jQuery(document).ready(function($){});'或者較短的'jQuery(function($){});'獲得'''傳遞進來,更多的本地''== === jQuery'裏面以及代碼在'document.ready'上觸發,漂亮整潔。或者使用任何其他名稱:),例如'jQuery(function(myVar){myVar('#myElem')。hide();});' – 2010-05-28 17:30:30

+0

太棒了,在這裏學到了很多東西。謝謝 – 2010-05-28 17:31:51

9

這裏的#4你正在尋找:

jQuery(function ($) { 
}); 

它將運行在document.ready上,命名空間內,並定義爲$的jQuery。

+0

這樣寫出來的輝煌的方式,將給我們帶來美元的力量,而不會帶來負面影響。 – rncrtr 2012-08-13 18:03:05