2012-04-24 91 views
2

有jQuery的奇怪圖案:jQuery的可變陰影

var jQuery = (function() { 

// Define a local copy of jQuery 
var jQuery = function(selector, context) { 
... 
return jQuery; 

})(); 

,這是什麼實際的原因是什麼?爲什麼不公開內部jQuery函數?它只是在內部jQuery和外部jQuery中的名稱衝突,因爲兩者都處於關閉狀態。

+1

它允許封裝所有其他[函數](https://github.com/jquery/jquery/blob/master/src/core.js#L942)和變量,這是定義'jQuery'所需的變量,但對用戶沒有意義 – zerkms 2012-04-24 07:50:08

回答

5

jQuery.noConflict(true)刪除了jQuery的全局名稱。但是,如果不爲對象使用某個名稱,就不可能對其餘的jQuery庫進行編程,因此需要使用本地非暴露名稱。爲方便起見,他們將jQuery重新定義爲匿名函數範圍內的變量。

0

該模式本身被稱爲模塊模式。這不是特定的jQuery,它並不奇怪,但非常有幫助。它允許隱藏對象狀態和實現。它還允許使用專門的方法(可訪問私人數據的公共方法)和其他良好的設計原則。

+0

我明白這是模塊模式,但我不明白爲什麼不公開爲什麼不公開已在匿名函數中的外部jQuery。 – Marii 2012-04-24 07:59:00