javascript自执行函数


Posted in Javascript onFebruary 10, 2017
function (window, $, undefined) {
 play=function(){
  $("#demo").val("This is a demo.");
 }
 window.wbLogin = play;
})(window, jQuery);

像上边这样的代码为什么要把window, jQuery对象传进去?

为什么要传入 jQuery?

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

为什么要传入 window?

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

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

为什么要传入 undefined?

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

一句话,使全局变量以参数形式变成自执行函数内部的局部变量。

至于为什么这么做,提高程序效率。为什么能提高效率,得从javascript的机制说起,所谓的scope chain作用域链,在当前作用域中如果没有该属性(局部变量)则向上一层作用域中寻找,一直到最上层,也就是window。也就是说全局变量和下级作用域都是window的一个属性,向下依此类推。

另外jQuery传入后将参数写成$可以保证在此函数内$为jquery而不是其他类似使用$符号的库。

undefined同理,由于没有传入第三个参数,自然就是undefined。由于javascript中undefined是一个变量,可以被改变,所以这样可以保证undefined判断时的准确性。有时判断时使用typeof xxx === 'undefined'也是因为这个原因。

以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,同时也希望多多支持三水点靠木!

Javascript 相关文章推荐
再次更新!MSClass (Class Of Marquee Scroll通用不间断滚动JS封装类 Ver 1.6)
Feb 05 Javascript
用JS实现的一个include函数
Jul 21 Javascript
深入理解JavaScript系列(12) 变量对象(Variable Object)
Jan 16 Javascript
动态获取复选框checkbox选中个数的jquery代码
Jun 25 Javascript
jquery制作漂亮的弹出层提示消息特效
Dec 23 Javascript
javascript实现倒计时并弹窗提示特效
Jun 05 Javascript
详解js界面跳转与值传递
Nov 22 Javascript
浅谈React中的元素、组件、实例和节点
Feb 27 Javascript
js实现通过开始结束控制的计时器
Feb 25 Javascript
vue把输入框的内容添加到页面的实例讲解
Nov 11 Javascript
vue实现前端分页完整代码
Jun 17 Javascript
jQuery实现全选按钮
Jan 01 jQuery
完美解决jQuery的hover事件在IE中不停闪动的问题
Feb 10 #Javascript
jquery hover 不停闪动问题的解决方法(亦为stop()的使用)
Feb 10 #Javascript
JS验证不重复验证码
Feb 10 #Javascript
使用jquery给新生的th绑定hover事件的实例
Feb 10 #Javascript
详谈Ajax请求中的async:false/true的作用(ajax 在外部调用问题)
Feb 10 #Javascript
jQuery移除或禁用html元素点击事件常用方法小结
Feb 10 #Javascript
jQuery基于Ajax方式提交表单功能示例
Feb 10 #Javascript
You might like
php利用curl抓取新浪微博内容示例
2014/04/27 PHP
php实现的简易扫雷游戏实例
2015/07/09 PHP
在CentOS上搭建LAMP+vsftpd环境的简单指南
2015/08/01 PHP
PHP简单实现防止SQL注入的方法
2018/03/13 PHP
php和redis实现秒杀活动的流程
2019/07/17 PHP
php计数排序算法的实现代码(附四个实例代码)
2020/03/31 PHP
PHP常用header头定义代码示例汇总
2020/08/29 PHP
列表内容的选择
2006/06/30 Javascript
18个非常棒的jQuery代码片段
2015/11/02 Javascript
javascript实现动态统计图开发实例
2015/11/21 Javascript
jquery对象和DOM对象的任意相互转换
2016/02/21 Javascript
node.js 用socket实现聊天的示例代码
2017/10/17 Javascript
关于Angularjs中跨域设置白名单问题
2018/04/17 Javascript
JS实现判断数组是否包含某个元素示例
2019/05/24 Javascript
python 文件与目录操作
2008/12/24 Python
python网络编程之UDP通信实例(含服务器端、客户端、UDP广播例子)
2014/04/25 Python
Python unittest模块用法实例分析
2018/05/25 Python
基于python的列表list和集合set操作
2019/11/24 Python
Python如何爬取b站热门视频并导入Excel
2020/08/10 Python
python实现excel公式格式化的示例代码
2020/12/23 Python
python 对xml解析的示例
2021/02/27 Python
纯CSS绘制漂亮的圆形图案效果
2014/05/07 HTML / CSS
关于HTML5你必须知道的28个新特性,新技巧以及新技术
2012/05/28 HTML / CSS
6号汽车旅馆预订:Motel 6
2018/02/11 全球购物
Jones New York官网:美国女装品牌,受白领女性欢迎
2019/11/26 全球购物
大学应届毕业生个人求职信
2013/09/23 职场文书
周鸿祎:教你写创业计划书
2013/12/30 职场文书
工厂采购员岗位职责
2014/04/08 职场文书
软件工程毕业生自荐信
2014/07/04 职场文书
教书育人演讲稿
2014/09/11 职场文书
公司离职证明标准范本
2014/10/05 职场文书
男方婚礼答谢词
2015/01/20 职场文书
停电调休通知
2015/04/16 职场文书
幼儿园小班班务总结
2015/08/03 职场文书
2016重阳节红领巾广播稿
2015/12/18 职场文书
MySQL数据库之存储过程 procedure
2022/06/16 MySQL