jQuery源码学习笔记

整个jQuery是一个自调用的匿名函数:

复制代码
 1 (function(global, factory) {
 2     if (typeof module === "object" && typeof module.exports === "object") {
 3         module.exports = global.document ?
 4             factory(global, true) :
 5             function(w) {
 6                 if (!w.document) {
 7                     throw new Error("jQuery requires a window with a document");
 8                 }
 9                 return factory(w);
10             };
11     } else {
12         factory(global);
13     }
14 }(typeof window !== "undefined" ? window : this, function(window, noGlobal) {
15                            /* jQuery主体代码 */
16 }));
复制代码

自调用函数大家都不陌生,前面的function(){}是函数定义,然后紧接着的()表示立即执行,这样构建了一个命名空间,其中的变量都是局部变量,不管起什么名字,都不会覆盖全局变量。这样就不会污染全局的命名空间。如果有不熟悉的同学,可以去看看作用域链和闭包的基础知识就明白啦。

这个子调用函数的函数体我们暂时可以不用管,貌似是处理jQuery与CommonJS、Node.js等的冲突和协调关系,这个我觉得不是重点,重点是这个自调用函数的参数。

整个参数列表有两个参数,第一个参数是传入Global对象,所有的全局变量都是Global对象的成员。传入这个变量,我们就将Global对象变成了这个自调用匿名函数的局部变量了,这样当我们访问它时,在自调用匿名函数的作用域中就能找到它,而不用将作用域链会退到Global,这样就更快啦。

第二个参数就是我们的jQuery啦,其中定义了jQuery的所有的内容,咱们的重点就在这里,那么现在开始,我们往下看。

1 jQuery = function(selector, context) {
2             // The jQuery object is actually just the init constructor 'enhanced'
3             // Need init if jQuery is called (just allow error to be thrown if not included)
4             return new jQuery.fn.init(selector, context);
5         }

在自调用的匿名函数里面,定义了一个jQuery变量,它是一个方法,执行后返回一个新jQuery对象,不过这个对象实际上是由jQuery.fn.init函数构建。在整个jQuery主体代码的最后会让window.jQuery和window.$两个全局变量引用这个jQuery方法:

1 if (typeof noGlobal === strundefined) {
2         window.jQuery = window.$ = jQuery;
3     }

这样当我们使用$(...)或者jQuery(...)的时候就能创建jQuery对象啦!



转自:https://www.cnblogs.com/chou/p/3915823.html


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值