Javascript语言中的自调用匿名函数格式如下:

(function(){
//do somethings
})();

它还有另外两种等价写法如下:

//等价写法一
(function(){
//do somthings
}());
//等价写法二
!function(){
//do somethings
}();

JQuery采用的是第一种写法

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

自调用匿名函数创建了一个独立的作用域,从而与全局以及其他类库的作用域分开,互相不污染变量。

一、JQuery将window对象最为参数传入函数域,从而使window对象成为JQuery函数域的局部变量,这样做的好处是:

  1.访问局部变量比访问全局变量的代价花销低很多,JQuery访问局部window对象时,不必通过作用域链调回全局来访问,从而更加快速的访问window对象。这一点在以后开发类库的时候是很好的优化方式;

  2.代码压缩优化。被压缩后的代码如下:

(function(a,b){})(window);

二、JQuery的第二个参数是undefined。

与null不同,undefined并不是一个数据类型,而是一个预定义的全局变量(参照JavaScript权威指南44页),它是可以被修改的(并不是所有浏览器都支持)。JQuery将undefined作为参数传入函数域,一方面是为了代码压缩优化;另一方面是为了防止修改undefined的行为影响JQuery作用域,确保在JQuery作用域内,undefined就是undefined,不是被修改的其他值。

三、自调用匿名函数的分号不能省略。

在JavaScript中,多行语句是可以省略单行句尾分号的,但是对于自调用匿名函数,不论是其之前的分号还是自身末尾的分号,最好都不要省略,如果省略可能会报错(尤其是在一些旧浏览器中)。

《JQuery技术内幕》读书笔记——自调用匿名函数剖析的更多相关文章

  1. Struts2技术内幕 读书笔记一 框架的本质

    本读书笔记系列,主要针对陆舟所著<<Struts2技术内幕 深入解析Strtus2架构设计与实现原理>>一书.笔记中所用的图片若无特殊说明,就都取自书中,特此声明. 什么是框架 ...

  2. Struts2技术内幕 读书笔记三 表示层的困惑

    表示层能有什么疑惑?很简单,我们暂时忘记所有的框架,就写一个注册的servlet来看看. index.jsp <form id="form1" name="form ...

  3. 深入理解linux网络技术内幕读书笔记(三)--用户空间与内核的接口

    Table of Contents 1 概论 1.1 procfs (/proc 文件系统) 1.1.1 编程接口 1.2 sysctl (/proc/sys目录) 1.2.1 编程接口 1.3 sy ...

  4. Struts2技术内幕 读书笔记二 web开发的基本模式

    最佳实践 在讨论基本模式之前,我们先说说一个词:最佳实践 任何程序的编写都得遵循一个特定的规范.这种规范有约定俗称的例如:包名全小写,类名每个单词第一个字母大写等等等等;另外还有一些需要我们严格遵守的 ...

  5. Kafka技术内幕 读书笔记之(一) Kafka入门

    在0.10版本之前, Kafka仅仅作为一个消息系统,主要用来解决应用解耦. 异步消息 . 流量削峰等问题. 在0.10版本之后, Kafka提供了连接器与流处理的能力,它也从分布式的消息系统逐渐成为 ...

  6. MySQL技术内幕读书笔记(八)——事务

    事务的实现 ​ 事务隔离性由锁来实现.原子性.一致性.持久性通过数据库的redo log和undo log来完成.redo log称为重做日志,用来保证事务的原子性和持久性.undo log用来保证事 ...

  7. MySQL技术内幕读书笔记(七)——锁

    锁 ​ 锁是数据库系统区分与文件系统的一个关键特性.为了保证数据一致性,必须有锁的介入.数据库系统使用锁是为了支持对共享资源进行并发访问,提供数据的完整性和一致性. lock与latch ​ 使用命令 ...

  8. MySQL技术内幕读书笔记(六)——索引与算法之全文索引

    全文索引 概述 ​ 通过索引字段的前缀进行查找,B+树索引是支持的,利用B+树索引就可以进行快速查询. SELECT * FROM blog WHERE content like 'xxx%'; ​ ...

  9. MySQL技术内幕读书笔记(二)——InnoDB存储引擎

    目录 InnoDB存储引擎 InnoDB存储架构 Checkpoint技术 Master Thread 工作方式 InnoDB关键特性(放一下,感觉看后面,再看总结吧) InnoDB存储引擎 Inno ...

随机推荐

  1. 用turtle库实现汉诺塔问题~~~~~

    汉诺塔问题 问题描述和背景: 汉诺塔是学习"递归"的经典入门案例,该案例来源于真实故事.‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬ ...

  2. N2N windows下编译安装文件

    n2n安装 n2n原理编译版下载,可直接使用:windows下vpn客户端 n2n_v2_linux_x64 n2n_v2_Win32TAP网卡驱动 #linux环境编译yum install -y ...

  3. springboot 使用mysql(mybatis)

    添加mysql依赖项 <dependency>   <groupId>org.mybatis.spring.boot</groupId>   <artifac ...

  4. Git与SVN的区别(面试常问)

    1.Git是分布式的,而SVN不是分布式的 2.Git把内容按元数据方式存储,而SVN是按文件 3.Git没有一个全局版本号,SVN有,目前为止这是SVN相比Git缺少的最大的一个特征 4.Git的内 ...

  5. SQL语句操作数据

    --切换数据库:手动切换和命令切换 use MySchool --向Student表中插入数据 --语法:INSERT [INTO] 表名 (列名) VALUES (值列表) --注意事项: --1. ...

  6. h5 调起ios数字键盘的坑,限制特殊字符输入方案

    最近有个需求是利率只允许输入数字和小数点,用以下 <input type="number" pattern="[0-9]*"> 在ios会调起数字键 ...

  7. (转)RandomAccessFile类使用详解

    1.RandomAccessFile特点   RandomAccessFile是java Io体系中功能最丰富的文件内容访问类.即可以读取文件内容,也可以向文件中写入内容.但是和其他输入/输入流不同的 ...

  8. BFS总结

    能够用 BFS 解决的问题,一定不要用 DFS 去做! 因为用 Recursion 实现的 DFS 可能造成 StackOverflow! (NonRecursion 的 DFS 一来你不会写,二来面 ...

  9. 实现ueditor的自动上传word中的……

    UEditor的配置和使用(单独图片与文件上传) Word图片上传控件发布-Xproer.WordPaster ueditor 图片粘贴上传,实现图文粘贴,图片自动上传 打开工程: 文档的上传. 运行 ...

  10. Linux-3.0.8中基于S5PV210的GPIO模块代码追踪和分析

    编写按键驱动时,想知道内核是如何管理GPIO的,所以开始追踪代码,中间走了一些弯路,现记录于此. 追踪代码之前,我猜测:第一,这部分代码应该在系统set up阶段执行:第二,GPIO的代码应该在mac ...