(function( window, undefined ) {
// jquery code
})(window);

  

  1. 这是一个自调用匿名函数。什么东东呢?在第一个括号内,创建一个匿名函数;第二个括号,立即执行
  2. 为什么要创建这样一个“自调用匿名函数”呢?

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

  1. 匿名函数从语法上叫函数直接量,JavaScript语法需要包围匿名函数的括号,事实上自调用匿名函数有两种写法(注意标红了的右括号):

(function() {

console.info( this );

console.info( arguments );

}( window ) );

(function() {

console.info( this );

console.info( arguments );

})( window );

  1. 为什么要传入window呢?

通过传入window变量,使得window由全局变量变为局部变量,当在jQuery代码块中访问window时,不需要将作用域链回退到顶层作用域,这样可以更快的访问window;这还不是关键所在,更重要的是,将window作为参数传入,可以在压缩代码时进行优化,看看jquery-1.6.1.min.js:

(function(a,b){})(window); // window 被优化为 a

  1. 为什么要在在参数列表中增加undefined呢?

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

undefined = "now it's defined";

alert( undefined );

浏览器测试结果:

浏览器

测试结果

结论

ie

now it's defined

可以改变

firefox

undefined

不能改变

chrome

now it's defined

可以改变

  • opera

now it's defined

可以改变

  1. 注意到源码最后的分号了吗?

分号是可选的,但省略分号并不是一个好的编程习惯;为了更好的兼容性和健壮性,请在每行代码后加上分号并养成习惯。

更多专业前端知识,请上 【猿2048】www.mk2048.com

jQuery源码分析相关推荐

  1. jQuery源码分析-each函数

    本文部分截取自且行且思 jQuery.each方法用于遍历一个数组或对象,并对当前遍历的元素进行处理,在jQuery使用的频率非常大,下面就这个函数做了详细讲解: 复制代码代码 /*! * jQuer ...

  2. jQuery源码分析系列

    声明:本文为原创文章,如需转载,请注明来源并保留原文链接Aaron,谢谢! 版本截止到2013.8.24 jQuery官方发布最新的的2.0.3为准 附上每一章的源码注释分析 :https://git ...

  3. [转] jQuery源码分析-如何做jQuery源码分析

    jQuery源码分析系列(持续更新) jQuery的源码有些晦涩难懂,本文分享一些我看源码的方法,每一个模块我基本按照这样的顺序去学习. 当我读到难度的书或者源码时,会和<如何阅读一本书> ...

  4. [转]jQuery源码分析系列

    文章转自:jQuery源码分析系列-Aaron 版本截止到2013.8.24 jQuery官方发布最新的的2.0.3为准 附上每一章的源码注释分析 :https://github.com/JsAaro ...

  5. jQuery 源码分析第一篇之入口源码

    目前阅读的是jQuery 1.11.3的源码,有参考nuysoft的资料.原来比较喜欢在自己的Evernote上做学习基类,并没有在网上写技术博客的习惯,现在开始学习JS的开源代码,想跟大家多交流,希 ...

  6. jQuery源码分析系列:.domManip() .buildFragment() .clean()

      .domManip(args,table,callback):是jQuery DOM操作的核心函数,可以扩展出如下方法: append/appendTo: prepend/prependTo: b ...

  7. jQuery源码分析-10事件处理-Event-事件绑定与删除-bind/unbind+live/die+delegat/unde

    10.4    .bind() .one() 10.4.1  如何使用 .bind( eventType, [eventData], handler(eventObject) )   在匹配的元素上绑 ...

  8. JQuery源码分析 - 闭包机制在jQuery中的使用及冲突解决

    jQuery中的闭包机制 本系列中我们将基于jquery3.5.1版本对jQuery源码进行分析,分析以源码加注释的方式展示. 本节中将分析jQuery源码中的 14 ~ 40行:自执行函数定义.环境 ...

  9. jQuery源码分析之$.ajax方法

    请阅读我其它的关于inspectPrefiltersOrTransport以及ajaxTransport等相关博文,请了解readyState状态码 针对获取到location.href的兼容代码: ...

  10. jQuery源码分析-10事件处理-Event-事件绑定与删除-bind/unbind+live/die+delegat/undelegate

    Js代码   作者:nuysoft/高云 QQ:47214707 EMail:nuysoft@gmail.com 声明:本文为原创文章,如需转载,请注明来源并保留原文链接. 后文预告:封装事件对象 便 ...

最新文章

  1. 国内IT出版社的四大软肋
  2. google nexus5 root 安装Xposed框架教程
  3. 强化学习(二)马尔科夫决策过程(MDP)
  4. LeapMotion使用入门
  5. springboot 页面下载文件 网页下载文件功能 文件放resourcce下面
  6. echarts 弹出放大_Echarts图标增加全屏/放大功能
  7. 面试--Linux命令总结
  8. 图片加载框架---UniversalImageLoader使用(一)
  9. 这样的高颜值网易云音乐,是你想要的吗?
  10. Android 获取图片研究
  11. python3.9出了吗_Python 3.9正式版,新特性提前一睹为快
  12. linux grep查找指定文件或目录下文件的字符
  13. R语言数据异常值处理
  14. html插入图片出现红叉,网页上的图片显示为红叉的解决方法
  15. 浏览器goback跨域
  16. 夺命雷公狗---微信开发61----在线点播电影网2之电影网之个人中心
  17. 深度Linux deepin更新,防火墙操作
  18. 微软的现实困难:产品需要再次变“酷”
  19. 电动汽车充电需求的深度时空预测
  20. 函数式编程(JAVA)——Lambda表达式

热门文章

  1. (3.5)HarmonyOS鸿蒙多按钮点击事件
  2. Java面向对象(1)--对象的创建使用类的实例化
  3. python每行输出14个数_python – 计算pandas中每行的一些值的列数
  4. 问题 1072: 汽水瓶
  5. S3C2410 bootloader ----VIVI阅读笔记 (转)下
  6. 将字符串中的指定字符全局替换
  7. linux 下访问mysql
  8. Java与JavaScript的通信
  9. python中for和while区别_Python学习第九篇——while和for的区别
  10. FAR,FRR,EER