专栏首页前端架构与工程《JQuery技术内幕》读书笔记——自调用匿名函数剖析

《JQuery技术内幕》读书笔记——自调用匿名函数剖析

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

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • JavaScript几个作用域问题

    1、 var a = 0 ; function f(){ a = 1; console.log(a); //全局变量a } console.log(a...

    寒月十八
  • Nodejs建站笔记-注册登录流程的简单实现

    1. 使用Backbone实现前端hash路由 登录注册页面如下: ? 初步设想将注册和登录作为两个不同的url实现,但登录和注册功能的差距只有form表单...

    寒月十八
  • 【译】《Understanding ECMAScript6》- 第二章-函数

    函数在任何一门编程语言中都是很重要的一个环节。JavaScript至今已有多年的历史,但是它的函数仍然停留在很初级的阶段。函数问题的大量堆积,以及某些函数非常微...

    寒月十八
  • 阿里产品一面 写面经攒人品

        说项目,项目问的非常深(本人提到之前做过的一篇关于FULL GC的问题定位和优化的项目以及一个多并发的项目)

    牛客网
  • Python 爬虫进阶必备 | 某视频数据分析平台加密参数分析(终于我还是手把手扣了代码)

    aHR0cHMlM0EvL3hkLm5ld3JhbmsuY24vZGF0YS90aWt0b2svcmFuay9vdmVyYWxs

    咸鱼学Python
  • Linux学习_006_JavaEE程序员常用linux命令整理

    JavaEE:后台应用都会涉及Linux系统、应用程序的部署、运维、分布式集群、大数据、云计算、……

    黑泽君
  • 云计算安全扩展要求标准应用实践

    去年11月-18日,在杭州举办的第七届全国网络安全等级保护测评体系建设会议取得圆满成功。与往年不同,本次会议会期从一天增加到两天,邀请了多位专家就等级保护标准解...

    安智客
  • 7 个令人惊讶的 JavaScript “特性”

    在过去的几个月里,我对 JSHint 做了一些改进,主要是,学习 ES6(我最自豪的是重新实现了变量作用域)的过程中我碰到了几个特性,它们让我惊讶,其中大部分是...

    疯狂的技术宅
  • Rxjs 响应式编程-第三章: 构建并发程序

    并发是正确有效地同时做几件事的艺术。为了实现这一目标,我们构建我们的程序来利用时间,以最有效的方式一起运行任务。 应用程序中的日常并发示例包括在其他活动发生时保...

    frontoldman
  • flutter中bottomNavigationBar切换组件保存状态方案

    我们在开发的时候用底部导航栏是很常见的,flutter给我们默认带了bottomNavigationBar,但是发现你直接这样写的时候,点击导航栏切换组建的时候...

    码农笔录

扫码关注云+社区

领取腾讯云代金券