在封装了不同的js库之后,我们终于得到了一点线程:

复制代码代码如下所示:

创建一个自调用匿名函数,设计参数窗口,并将其传递到窗口对象中。



这个过程的目的是,

复制代码代码如下所示:

代码不会受到其他代码的污染,也不会污染其他代码。



jQuery封装

因此,jQuery的一个早期版本被发现,和版本号是包代码1.7.1,大致如下

复制代码代码如下所示:

函数(窗口,未定义){

var jQuery =(函数(){ console.log(你好);});

window.jquery =美元= jQuery的窗口;

如果(typeof定义为功能define.amd定义。AMD。jQuery){

定义()

}

}(窗口);



其中

复制代码代码如下所示:

console.log(你好);



它是用来验证工作是否在一开始就完成的,所以我们可以在窗口中调用jQuery。

复制代码代码如下所示:

美元的窗口。



或是它

复制代码代码如下所示:

window.jquery



所以我们可以创建一个类似的包

复制代码代码如下所示:

函数(窗口,未定义){

函数(){()

}

}(窗口)



只比它少了两倍。

1。定义jQuery的符号和全局调用

2。异步支持

所以找到了一个更早期的jQuery包,方法大致相同,除了。

复制代码代码如下所示:

如果(typeof window.jquery = = undefined){

Var(jQuery =函数){ };

如果美元(typeof!=未定义

jQuery _ =美元美元;

var;

};



它是如此惊人,我们没有办法重写前面的jQuery的。所以我们要看到最新的jQuery包装是什么。所以我打开2.1.1和发现,除了很多功能,基本思想仍然是相同的。

复制代码代码如下所示:

(函数,全局,工厂){

如果(typeof模块=对象类型的module.exports =对象){

module.exports = global.document

工厂(全球,真实):

函数(w){

如果(!w.document){

抛出新错误(jQuery需要一个带有文档的窗口);

}

返回工厂(W);

};

{人}

工厂(全球);

}

}(typeof = =未定义窗口!窗口:这个功能(窗口,noglobal){

函数(){()

console.log('jquery);

};

如果(typeof定义为功能的定义。AMD){

定义()

返回jQuery;

});

};

strundefined =类型定义;

如果(typeof noglobal = strundefined){

window.jquery =美元= jQuery的窗口;

};

返回jQuery;

});



在使用浏览器的情况下

复制代码代码如下所示:

类模块=未定义



所以,上述情况是基于Node.js的使用等等,这也表明jQuery变得臃肿。

骨干封装

打开主干看看

复制代码代码如下所示:

(函数,根,工厂){

如果(typeof定义= 'function'define。AMD){

定义({ 'underscore ','jquery ','exports},功能(_,出口美元){

根。骨干=厂(根、出口,_,$);

});

如果(typeof出口其他}!= = 'undefined){

无功_ =需要('underscore);

厂(根、出口,_);

{人}

根。骨干=厂(根、根。_,{ }(root.jquery根。Zepto root.ender根。|美元| | | | |));

}

}(这个功能(根、骨干,_,{ $)

主干。$ = $;

返回骨干;

});



除了异步支持之外,它还体现了对jQuery和下划线的依赖性。

复制代码代码如下所示:

定义({ 'underscore ','jquery ','exports},功能(_,出口美元){

根。骨干=厂(根、出口,_,$);

});



这表明,骨干是requirejs原生支持。

强调封装

所以,看着下划线,发现图书馆占据了_符号

复制代码代码如下所示:

(函数(){())

var =;

var =功能(obj){ _

如果(obj instanceof _)返回的对象;

如果(!(这是_))返回(obj)_;

这_wrapped =目标;

};

如果(typeof出口!= 'undefined){

如果(typeof模块!= = 'undefined'module。出口){

module.exports _出口= =;

}

_ = _出口;

{人}

_ = _根;

}

如果(typeof定义= 'function'define。AMD){

定义('underscore功能({ }){。

返回_;

});

}

}调用(这个);



一般来说,它们几乎都是匿名函数,除了最后一个是调用()方法。