javascript,jQuery自执行函数(匿名函数)为什么要把windows, jQuery, undefined作为参数传进去
来源:互联网 发布:时时彩软件urssc 编辑:程序博客网 时间:2024/06/05 14:16
为什么要传入 window ?
1. 可以提高程序效率
为什么能提高效率,得从javascript的机制说起,所谓的scope chain作用域链,在当前作用域中如果没有该属性(局部变量)则向上一层作用域中寻找,一直到最上层,也就是window,查找速度慢。也就是说全局变量和下级作用域都是window的一个属性,向下依此类推。通过传入window变量,使得window 由全局变量变为局部变量,当在 jQuery 代码块中访问 window时,不需要将作用域链回退到顶层作用域,这样可以更快的访问window,查找速度快;
2. 压缩代码时可以进行优化
将window 作为参数传入,可以在压缩代码时进行优化,例:(function( a , b) {} )(window); // window 被优化为 a ;
为什么要传入 jQuery?
1. 首先函数会构建作用域,把jQuery传进去,可以减少作用域查找,提高js执行速度。
如果不把jQuery当参数传递,则你使用变量jQuery/$的时候,首先会在函数体内查找,然后进fn查找,最后到window下查找。
2. 而你把jQuery传进去之后,则只需要在函数体内查找$即可。
如果以后依赖的是Zepto/jqlite,你只需要改下参数就行了,在这种极端的情况下,降低了代码修改和可复用成本。jQuery 被应用在成千上万的 JavaScript 程序中,必须确保 jQuery 创建的变量不能和导入他的程序所使用的变量发生冲突。
为什么要传入 undefined
js本身有一个bug:undefined能被重写!!
undefined是window下的一个属性,非保留字,非关键字,可以被重写。
为什么undefined被重写会很危险呢,看下面的代码:
(function (undefined) { let a; // 如果a没有值则为a赋值. 但因为undefined被重写了,所以这句根本执行不到。 if (a === undefined) { a = 'b'; }})(true);
在自调用匿名函数的作用域内,为防止undefined被修改,确保undefined是真的未定义,形参设undefined, 传入空值。因为undefined能够被重写,赋予新的值。
undefined ="now it's defined";
alert( undefined );
浏览器测试结果:
ie8 now it's defined 可以改变
firefox22 undefined 不能改变
chrome31 undefined 不能改变
opera12 undefined 不能改变
我的IE最高版本是 8,不知道高版本如何。除了 IE,其他的浏览器都默认 undefined不可改变。
阅读全文
0 0
- javascript,jQuery自执行函数(匿名函数)为什么要把windows, jQuery, undefined作为参数传进去
- javascript自执行函数为什么要把windows作为参数传进去
- Jquery、自执行匿名函数和ajax
- JavaScript/JQuery自执行函数
- javascript自执行匿名函数
- javascript 匿名自执行函数
- javascript自执行匿名函数
- JavaScript自执行匿名函数
- JS匿名执行函数 (JQuery)
- jquery源码笔记1-匿名自执行函数
- jquery源码学习笔记:自执行匿名函数剖析
- Javascript 自执行函数(匿名函数)
- jQuery源码学习之一 (采用匿名函数自执行模式)
- javascript中的自执行匿名函数
- JavaScript 中的自执行匿名函数
- javascript中的自执行匿名函数
- Javascript的匿名函数与自执行
- javascript匿名函数与自执行
- java实现求一个数组中有多少个子序列
- maven打包出现错误: Failed to clean project: Failed to delete
- JsonUtil.fromJson -- error
- Java基础
- selenium+java如何进行Q三方登录(续坑)
- javascript,jQuery自执行函数(匿名函数)为什么要把windows, jQuery, undefined作为参数传进去
- View的自由拖动(属性动画的实践之一)
- VT100控制码进行终端扩展显示
- Window环境下mysql读写分离以及主从配置(不错可以的)
- 第二讲 Controller配置汇总
- qml之qmldir文件的使用
- struts2 参数接收不到的原因
- 关于反爬虫,看这一篇就够了
- 信用有多重要?欠款200元,多付4万利息!(附逾期补救办法)