学了很久的js也写了很长时间的jquery了,这里来以学习的态度来看大牛的思想和架构。
使用的是当前最新版本
3.1.1
就不考虑烦人的IE 6 7 8了,轻松愉快。
其实一上来不知所措,这都是啥?
( function( global, factory ) {
"use strict";
if ( typeof module === "object" && typeof module.exports === "object" ) {
module.exports = global.document ?
factory( global, true ) :
function( w ) {
if ( !w.document ) {
throw new Error( "jQuery requires a window with a document" );
}
return factory( w );
};
} else {
factory( global );
}
} )( typeof window !== "undefined" ? window : this, function( window, noGlobal ) {
});
类似于(function(a,b){……})(a,b) 这种形式的是函数的立即执行,函数调用一般先命名,然后进行调用,例如
function a() {……} , a()
函数立刻调用就直接在后面写参数就好了(不用命名,为匿名函数),不过函数不加括号的话js语法会报错,然而在前面加上各种一元运算符(+ - ! ~)可以省下括号
然后就是传过去的两个参数,一个是window全局对象->global,另一个是一个函数->factory,
执行时不用看前面的module逻辑,那是在非浏览器端执行的逻辑,不在讨论范围内,直接看else
factory(global)
这就是工厂模式,不过在这里的用处仅仅是区分浏览器对象还是非浏览器对象使用
上面那一堆代码就是完成了将真正的window对象传到function的window参数中的作用,为啥要这么折腾呢?一方面不去污染全局变量window,
另一方面window对象可能不在浏览器对象中,非浏览器中this指向的是module.exports,走的就不是这一套了,不过不在讨论范围内.
(待续)