我的jQuery版本为1.7*
这个版本代码比之前的版本优化了很多,结构也清晰了不少,就用最新的吧。
打开jQuery源代码
首先你能看到所有代码被一个
(function(window,undefined){ })(window)
这是个什么东西..
首先,这是一个匿名函数(不懂?那就先去谷歌下吧);
其次,这是一个自调用匿名函数;
这段代码做了三件事
第一件:创建一个只给jQuery用的空间,我们估且就叫 “私有空间”,与C++的命名空间很相似,为了保证jQuery不与其他JavaScript框架冲突,如果是一个JavaScript框架,为了通用性,必须要有自己的命名空间!
第二件:传入一个window变量,本来window是一个全局变量,但是这里把它传给jQuery框架,这个时候window在jQuery框架里就变成局部变量了,为什么?一切为了速度。当window变成局域变量之后,在JQ框架里面调用window变量,它的作用连就不用再回到顶层作用于。
注意:传到jQuery的window对象并不是一个拷贝,而是可以认为是一个指针,他们指向同一段内存地址。
如下面的代码:
window.a='this is in window'; (function(window,undefined){ window.a='this is in jq'; setTimeout(function(){ alert(window.c); //输出 this is c },1000) })(window) window.c='this is c'; console.log(window.a) //输出 this is in jq;
第三件:传入undefined变量,为啥?
我也不太确定,查了下资料,说是为了保证jQuery空间内undefined为真的未定义。因为undefined可以被赋值变成一个局部变量。
如:
undefined="this is siren"; alert(undefine);
这段代码 除了在FireFox里不能变,其他浏览器unefined都变成已定义了。
下一章,我们就要从jQuery源码里,由上往下一点点分析了。