jquery源码分析(一)

本文分析了jQuery源码中的自执行函数及其传入window和undefined的原因,探讨了new jQuery.fn.init()的用法,解释了如何在不使用new关键字的情况下创建jQuery对象,并详细阐述了jQuery构造函数的返回逻辑和原型链的设计,以确保对象能调用jQuery.prototype上的方法。
摘要由CSDN通过智能技术生成

最近开始阅读jquery的源码,首先先提炼出jquery的核心结构。

自执行函数

(function(window,undefined){
   
    //...
})(window);

为什么传入window?

1.代码压缩

首先从代码压缩混淆的角度考虑,用线上工具来压缩混淆下面这段示例代码:

function test(){
   
  var name="hello";
  window.description="hi "+name;
}

压完混完后瘦了一点:

function say(){
   var a="hello";window.description="hi "+a}

用a代替了name,但是window既不是声明的局部变量也不是参数,是不会被压缩混淆的。
所以将window作为参数传入可解决这个问题。将window作为参数传入,可以在压缩代码时进行优化,即参数名可以压缩变短。也可以在函数内另起个简短的变量名代替。

2.作用域

访问当前作用域下的变量比访问全局变量要快
如果不传入,每个语句都要去找一次window。如果将window作为参数传递过去,不要每个语句都去找window,提高了效率。

为什么要传入undefined?

undefined并不是作为JavaScript的保留关键字;undefined在IE8及以下中是可以对其重新赋值的

var undefined="new value";
alert(undefined);//alert “new value"

执行匿名函数的时候,只传递一个参数window,而不传递undefined,那么函数体中的undefined局部变量的值,刚好就是undefined

var undefined = 8;  
(function( window ) {   
    alert(window.undefined); // 8  
    alert(undefined); // 8  
})(window);  

加了undefined后

var undefined = 8;  
(function( window, undefined ) {   
    alert(window.undefined);  // 8  
    alert(undefined); // 此处undefined参数为局部的名称为undefined变量,值为undefined  
})(window);  

在 自调用匿名函数 的作用域内,确保undefined是真的未定义。因为undefined能够被重写,赋予新的值.

new jQuery.fn.init( selector, context );


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值