资讯专栏INFORMATION COLUMN

jQuery源码分析系列之自调用匿名函数

psychola / 651人阅读

摘要:自调用匿名函数打开源码,首先你会看到这样的代码结构这是一个自调用匿名函数。这样子最大程度防止外界的变量定义对内部造成影响

自调用匿名函数

打开jQuery源码,首先你会看到这样的代码结构:

(function(window,undefined){

    //jquery code

})(window);

这是一个自调用匿名函数。在第一个括号内,创建一个匿名函数;第二个括号内,立即执行

使用自调用匿名函数的原因

通过定义一个匿名函数,创建了一个“私有”的命名空间,该命名空间的变量和方法,不会破坏全局的命名空间。这点非常有用也是一个js框架必须支持的功能,jQuery被应用在成千上万的JavaSctipt程序中,必须确保jQuery创建的变量不能和导入他的程序所使用的变量发生冲突

传入参数window的原因

传入window:因为执行js代码是从里到外的,通过传入window变量,使得window由全局变量变为局部变量,当在jQuery代码块中访问window时,不需要将作用域链回退到顶层作用域,这样可以更快的访问window;更重要的是,将window作为参数传入,可以在压缩代码时进行优化,例如jQuery-1.6.1.min.js: (function(a,b){})(window);//window被优化为a

传入undefined的原因:

(1)Javascript 中的 undefined 并不是作为关键字,因此可以允许用户对其赋值,例如IE8:

    var undefined = "change"
    ;(function(window) {
          alert(undefined);//IE8 "change"
    })(window)
    

(2)行参undefined是局部的,所以就算在外部定义了undefined,里面的undefine依然不受影响。这样子最大程度防止外界的变量定义对内部造成影响

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/82440.html

相关文章

  • lodash源码分析之自减的两种形式

    摘要:作用与用法是的内部函数,之前在源码分析之缓存介绍过一种这样的数据结构这是一个二维数组,每项中的第一项作为缓存对象的,第二项为缓存的值。 这个世界需要一个特定的恶人,可以供人们指名道姓,千夫所指:全都怪你。——村上春树《当我谈跑步时我谈些什么》 本文为读 lodash 源码的第六篇,后续文章会更新到这个仓库中,欢迎 star:pocket-lodash gitbook也会同步仓库的更新...

    Keven 评论0 收藏0
  • jQuery源码分析1-jQuery对象的初始化

    摘要:那么为什么要在参数列表中增加呢这样做也有两个目的因为有些低版本的浏览器中是可以被重新赋值的,在自调用匿名函数的作用域内,确保是真的未定义。 1、命名空间 为什么要使用命名空间? 在一些语言中会看到有命名空间的概念,可在js中并没有,但是可以通过闭包来实现。在js闭包中定义的变量会被保存到一个作用域且不会污染全局变量,在程序运行完之后也不会被销毁。 我们可以看到,jQuery的做法就是使...

    qiangdada 评论0 收藏0
  • 听飞狐聊JavaScript设计模式系列04

    摘要:介一回,偶们来聊一下用中的类,有些盆友可能用过或者的,知道语法糖,可是在中并没有,中需要用到构造函数来模拟类。而且要注意一点,构造函数没有语句,是自动返回。 本回内容介绍 上一回聊到JS的Function类型,做了柯里化,数组去重,排序的题。 介一回,偶们来聊一下用JS中的类,有些盆友可能用过ES6或者TypeScript的,知道Class语法糖,可是在ES5中并没有,ES5中需要用到...

    kgbook 评论0 收藏0
  • javascript 中踩过的坑 --(function(){})()

    摘要:在这一节,我们碰到的片段是一组立即运行的匿名函数。匿名函数的调用要调用一个函数,我们必须要有方法定位它,引用它。那么很显然,没有任何实现的匿名函数不可能应用了闭包特性。 代码如下: (function(){ //这里忽略jQuery所有实现 })(); (function(){ //这里忽略jQuery所有实现 })(); 半年前初次接触jQuery的时候,我也像其他人一样很兴...

    vpants 评论0 收藏0
  • 学习 underscore 源码整体架构,打造属于自己的函数式编程类库

    摘要:译立即执行函数表达式处理支持浏览器环境微信小程序。学习整体架构,利于打造属于自己的函数式编程类库。下一篇文章可能是学习的源码整体架构。也可以加微信,注明来源,拉您进前端视野交流群。 前言 上一篇文章写了jQuery整体架构,学习 jQuery 源码整体架构,打造属于自己的 js 类库 虽然看过挺多underscore.js分析类的文章,但总感觉少点什么。这也许就是纸上得来终觉浅,绝知此...

    junnplus 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<