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 相关文章推荐
跨浏览器的设置innerHTML方法
Sep 18 Javascript
脚本吧 - 幻宇工作室用到js,超强推荐base.js
Dec 23 Javascript
JavaScript字符串String和Array操作的有趣方法
Dec 18 Javascript
jQuery响应鼠标事件并隐藏与显示input默认值
Aug 24 Javascript
纯JavaScript实现获取onclick、onchange等事件的值
Dec 29 Javascript
28个常用JavaScript方法集锦
Jan 14 Javascript
javascript实现简单的分页特效
Aug 12 Javascript
微信小程序地图(map)组件点击(tap)获取经纬度的方法
Jan 10 Javascript
vue实现自定义H5视频播放器的方法步骤
Jul 01 Javascript
js实现点赞效果
Mar 16 Javascript
JavaScript JSON使用原理及注意事项
Jul 30 Javascript
JavaScript实现切换多张图片
Jan 27 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&java(二)
2006/10/09 PHP
PHP获取网卡地址的代码
2008/04/09 PHP
修改Zend引擎实现PHP源码加密的原理及实践
2008/04/14 PHP
PHP控制前台弹出对话框的实现方法
2016/08/21 PHP
php下的原生ajax请求用法实例分析
2020/02/28 PHP
在你的网页中嵌入外部网页的方法
2007/04/02 Javascript
js文字滚动停顿效果代码
2008/06/28 Javascript
jquery 插件开发 extjs中的extend用法小结
2013/01/04 Javascript
js跳转页面方法总结
2014/01/29 Javascript
AngularJs Understanding the Model Component
2016/09/02 Javascript
PHP获取当前页面完整URL的方法
2016/12/02 Javascript
JavaScript模板引擎Template.js使用详解
2016/12/15 Javascript
JS表单提交验证、input(type=number) 去三角 刷新验证码
2017/06/21 Javascript
vue axios用法教程详解
2017/07/23 Javascript
vue cli构建的项目中请求代理与项目打包问题
2018/02/26 Javascript
JS实现Cookie读、写、删除操作工具类示例
2018/08/28 Javascript
JavaScript实现shuffle数组洗牌操作示例
2019/01/03 Javascript
Vue开发之封装上传文件组件与用法示例
2019/04/25 Javascript
layer.open 获取不到表单信息的解决方法
2019/09/26 Javascript
[02:25]DOTA2英雄基础教程 虚空假面
2014/01/02 DOTA
python 七种邮件内容发送方法实例
2014/04/22 Python
Python实现获取前100组勾股数的方法示例
2018/05/04 Python
远程部署工具Fabric详解(支持Python3)
2019/07/04 Python
通过 Python 和 OpenCV 实现目标数量监控
2020/01/05 Python
使用python执行shell脚本 并动态传参 及subprocess的使用详解
2020/03/06 Python
python中最小二乘法详细讲解
2021/02/19 Python
英国家居用品和床上用品零售商:P&B Home
2020/01/16 全球购物
娇韵诗俄罗斯官方网站:Clarins俄罗斯
2020/10/03 全球购物
年终总结会议主持词
2014/03/17 职场文书
安康杯竞赛活动总结
2014/05/05 职场文书
高等学院职业生涯规划书范文
2014/09/16 职场文书
公安交警个人对照检查材料思想汇报
2014/10/01 职场文书
担保书范文
2015/01/20 职场文书
傲慢与偏见读书笔记
2015/06/29 职场文书
党员干部学法用法心得体会
2016/01/21 职场文书
background-position百分比原理详解
2021/05/08 HTML / CSS