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 相关文章推荐
用jscript实现列出安装的软件列表
Jun 18 Javascript
js AspxButton的客户端操作
Jun 26 Javascript
Javascript技术栈中的四种依赖注入详解
Feb 23 Javascript
JavaScript实现垂直向上无缝滚动特效代码
Nov 23 Javascript
jQuery实现花式轮播之圣诞节礼物传送效果
Dec 25 Javascript
jQuery插件HighCharts实现的2D条状图效果示例【附demo源码下载】
Mar 15 Javascript
JavaScript事件对象event用法分析
Jul 27 Javascript
详解JavaScript栈内存与堆内存
Apr 04 Javascript
layui 解决form表单点击无反应的问题
Oct 25 Javascript
vue实现将一个数组内的相同数据进行合并
Nov 07 Javascript
Vuejs通过拖动改变元素宽度实现自适应
Sep 02 Javascript
vue3.0 上手体验
Sep 21 Javascript
完美解决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实现的生成静态HTML速度快类库
2007/03/31 PHP
PHP利用str_replace防注入的方法
2013/11/10 PHP
php生成静态页面的简单示例
2014/04/17 PHP
PHP与SQL语句常用大全
2016/12/10 PHP
PHP实现简单计算器小程序
2020/08/28 PHP
Thinkphp5+plupload实现的图片上传功能示例【支持实时预览】
2019/05/08 PHP
js获取当前时间显示在页面上并每秒刷新
2014/12/24 Javascript
JavaScript函数参数使用带参数名的方式赋值传入的方法
2015/03/19 Javascript
RequireJS 依赖关系的实例(推荐)
2017/01/21 Javascript
js中null与空字符串""的区别讲解
2019/01/17 Javascript
微信公众平台 发送模板消息(Java接口开发)
2019/04/17 Javascript
jQuery设置下拉框显示与隐藏效果的方法分析
2019/09/15 jQuery
python实现udp数据报传输的方法
2014/09/26 Python
独特的python循环语句
2016/11/20 Python
python中模块的__all__属性详解
2017/10/26 Python
python 按不同维度求和,最值,均值的实例
2018/06/28 Python
Python同步遍历多个列表的示例
2019/02/19 Python
Python中类的创建和实例化操作示例
2019/02/27 Python
Python实现爬取亚马逊数据并打印出Excel文件操作示例
2019/05/16 Python
python GUI库图形界面开发之PyQt5 Qt Designer工具(Qt设计师)详细使用方法及Designer ui文件转py文件方法
2020/02/26 Python
Pycharm内置终端及远程SSH工具的使用教程图文详解
2020/03/19 Python
Python基于codecs模块实现文件读写案例解析
2020/05/11 Python
tensorflow使用CNN分析mnist手写体数字数据集
2020/06/17 Python
Pytorch自定义Dataset和DataLoader去除不存在和空数据的操作
2021/03/03 Python
CSS3地图动态实例代码(圆圈向外扩散)
2018/06/15 HTML / CSS
需要知道的CSS3动画技术
2010/01/01 HTML / CSS
欧洲最大的笔和书写专家:The Pen Shop
2017/03/19 全球购物
乌克兰在线电子产品商店:MTA
2019/11/14 全球购物
销售文员岗位职责
2013/11/29 职场文书
体现团队精神的口号
2014/06/06 职场文书
节约粮食标语
2014/06/18 职场文书
环境保护标语
2014/06/20 职场文书
常务副县长“三严三实”对照检查材料思想汇报
2014/10/05 职场文书
幼儿园见习总结
2015/06/23 职场文书
建筑工程挂靠协议书
2016/03/23 职场文书
python中if和elif的区别介绍
2021/11/07 Python