2

jQuery中有一个奇怪的模式:

var jQuery = (function() {

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

})();

这样做的实际原因是什么?为什么不直接暴露内部的 jQuery 函数呢?是否仅用于内部 jQuery 和外部 jQuery 中的名称冲突,因为两者都在闭包中。

4

2 回答 2

5

jQuery.noConflict(true)删除 jQuery 的全局名称。但是,如果不为对象使用某个名称,就不可能对 jQuery 库的其余部分进行编程,因此需要使用本地的、非公开的名称。为方便起见,他们重新定义jQuery为匿名函数范围内的变量。

于 2012-04-24T07:50:24.493 回答
0

模式本身称为模块模式。它不是专门针对 jQuery 的,它并不奇怪但很有帮助。它允许隐藏对象状态和实现。它还允许使用特权方法(可以访问私有数据的公共方法)和其他良好的设计原则。

于 2012-04-24T07:57:33.597 回答