jquery源码解析1

    学了很久的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,走的就不是这一套了,不过不在讨论范围内.

    (待续)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值