2012-04-24 67 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