献给和我合作的过得前端童靴们:jquery源码分析--序

jquery 源码分析
jquery 版本 1.12.2
浏览器: ie, 谷歌,火狐, 360
编辑器:Notepad++

载入jauery库文件的时候, 我们就得到了一个”jQuery”函数,那么这个jquery函数是怎么产生的呢?接下来我就开始一步一步解开这个答案。
请看这张图:
这里写图片描述

我稍微调整了下格式,一目了然。这个原型就是 js的匿名函数调用

(function(global, factory){
    dosoming...
}(arg1, function(window, noGlobal){ 
    dosoming...
    }
));

如果不太理解的话,试着执行这两段代码体会一下:

(function(b){alert(b)}(2));
(function(b, callback){alert(b); callback()}(2, function(){ alert("function")}));

这一个结论可以得出,他在加载的时候,就自动执行了,进行初始化。

接着我们看一下,他传递的参数
1.typeof window !== “undefined” ? window : this
2.function( window, noGlobal ){ dosoming… }

第一个参数很容易解释
他判断了window对象是否存在,如果存在传递window, 否则传递this(一般浏览器的全局对象this 就是window),至于什么时候是window == ‘undefined’表示不知道…如果有牛人知道就请留言一下吧

第二个参数是一个函数,看见函数作为参数的第一反应就是这个函数作为回调函数调用。。
他接受两个参数,
第一个参数名 window 这里指的是全局对象或者是某个特定对象,比如说某个框架把jquery自己的属性
第二个参数名 noGlobal 这里指的是非全局, 参考源码“factory( global, true ) ”这个noGlobal应该是bool类型

接下来我们看一下这个函数的内部代码:
这里写图片描述

这代码其实很简单, 用三个字概括就是 “做兼容”。
一般情况下,第一个加载的js文件就是jquery, 然后浏览器又不存在model的全局对象。所以这时候调用的就是 “factory( global )”。
然后可以想象 module 是一个特殊对象,在加载jquery 之前就已经存在。。。jquery给的解释是CommonJS 和 Nodejs,有兴趣的童靴可以去了解一下。

通过上述分析,jquery真正的核心就是第二个参数 “function( window, noGlobal ){ dosoming… }” 。

接着把代码翻到最后一行。
这里写图片描述
刚才说了 在这个函数中 window 是全局对象window(目前只讨论一般情况)。说到这里大家都懂了吧?为什么jquery加载以后就就能使用 jQuery"jQuery"" ”只是一个window用来创建JQuery对象的方法。)
如果还不理解的童靴可以看一下这个原型:
“(function( global, factory ) { factory(global); }(window, function(window){ var a = “我是jquery”; window.a = a; } ));”帮助理解。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值