jQuery中有一个奇怪的模式:
var jQuery = (function() {
// Define a local copy of jQuery
var jQuery = function( selector, context ) {
...
return jQuery;
})();
这样做的实际原因是什么?为什么不直接暴露内部的 jQuery 函数呢?是否仅用于内部 jQuery 和外部 jQuery 中的名称冲突,因为两者都在闭包中。
jQuery中有一个奇怪的模式:
var jQuery = (function() {
// Define a local copy of jQuery
var jQuery = function( selector, context ) {
...
return jQuery;
})();
这样做的实际原因是什么?为什么不直接暴露内部的 jQuery 函数呢?是否仅用于内部 jQuery 和外部 jQuery 中的名称冲突,因为两者都在闭包中。
jQuery.noConflict(true)
删除 jQuery 的全局名称。但是,如果不为对象使用某个名称,就不可能对 jQuery 库的其余部分进行编程,因此需要使用本地的、非公开的名称。为方便起见,他们重新定义jQuery
为匿名函数范围内的变量。
模式本身称为模块模式。它不是专门针对 jQuery 的,它并不奇怪但很有帮助。它允许隐藏对象状态和实现。它还允许使用特权方法(可以访问私有数据的公共方法)和其他良好的设计原则。