2013-01-16 39 views
2

我有一個劇本的工作,並已發現了下面,我實在找不到什麼意思這是一個雙文檔準備好了嗎?

(function($) { 
    $(document).ready(function(e) { 


     ... bla bla bla ... 

    }); 
}) (jQuery); 

(function($){}) (jQuery);一樣$(function() {});任何信息?如果是這樣,爲什麼有人會定義兩次document.ready

+1

可能試圖解決一些OTHER js庫從jquery重新定義'$',通過將整個jquery對象作爲參數傳遞給這個「ready」函數,所以當內部就緒函數實際觸發時,它保證是jquery。 –

+0

可能與許多其他庫正在加載時一樣@MarcB。謝謝 – Alex

回答

3

不,這是不一樣的。這是一個正在傳遞jQuery對象的匿名函數,以確保它在函數範圍內作爲局部變量$可用,即使全局變量$被另一個庫覆蓋。它完全不同於$(function() { })$(document).ready(function() { })

這種特殊圖案的jQuery plugin authoring文檔中推薦:

[當創作一個插件]它是將jQuery傳遞到IIFE(立即調用函數表達式)一個最好的做法,它映射到元簽名,因此它不能被執行範圍內的其他庫覆蓋。

(function($) { 
    $.fn.myPlugin = function() { 

    // Do your awesome plugin stuff here 

}; 
})(jQuery); 
2

(function($){}) (jQuery);一樣$(function() {});

不需要。第一個是立即調用匿名函數,主要用於防止全球範圍的污染。在這種情況下,它也用於確保$是對jQuery的引用,而不用擔心在其他地方覆蓋$

第二個是帶有jQuery的the shorthand for binding a document ready handler

更多閱讀:

1

不,這不是。它是一個封閉式的文檔就緒處理程序。它用於確保機箱中的$爲jQuery保留,並且不會干擾任何其他庫。

2

否它不是,(function($){}) (jQuery);是IIFE(立即調用函數表達式)使jQuery的作爲參數,並使用$代表它在功能範圍,以便如果使用$另一個庫而不加載不會發生衝突使用jQuery.noConflict。

0
+1

雖然這可能在理論上回答這個問題,[這將是更可取的](http://meta.stackexchange.com/q/8259)在這裏包括答案的基本部分,並提供參考鏈接。 –

+0

強烈建議不要使用鏈接回答。您的回答需要包括回答問題所需的所有信息,然後可以通過鏈接補充*。 – meagar

2

都能跟得上

(function(){})(); 

是隻要瀏覽器遇到腳本執行。 。ready()是整個文檔被解析後觸發的事件