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 相关文章推荐
构造函数+原型模式构造js自定义对象(最通用)
May 12 Javascript
使用node.js 获取客户端信息代码分享
Nov 26 Javascript
jQuery实现带滑动条的菜单效果代码
Aug 26 Javascript
如何利用AngularJS打造一款简单Web应用
Dec 05 Javascript
Node.js+Express+MySql实现用户登录注册功能
Jul 10 Javascript
AngularJS日程表案例详解
Aug 15 Javascript
jQuery中each循环的跳出和结束实例
Aug 16 jQuery
jQuery实现图片上传预览效果功能完整实例【测试可用】
May 28 jQuery
微信小程序数据分析之自定义分析的实现
Aug 17 Javascript
Node.js中Koa2在控制台输出请求日志的方法示例
May 02 Javascript
JS Thunk 函数的含义和用法实例总结
Apr 08 Javascript
解决vue加scoped后就无法修改vant的UI组件的样式问题
Sep 07 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中Array2xml类实现数组转化成XML实例
2014/12/08 PHP
php实现删除空目录的方法
2015/03/16 PHP
thinkPHP使用post方式查询时分页失效的解决方法
2015/12/09 PHP
php中array_slice和array_splice函数解析
2016/10/18 PHP
ThinkPHP删除栏目(实现批量删除栏目)
2017/06/21 PHP
window.dialogArguments 使用说明
2011/04/11 Javascript
漂亮的jquery提示效果(仿腾讯弹出层)
2013/02/05 Javascript
javascript调试过程中找不到哪里出错的可能原因
2013/12/16 Javascript
js中substring和substr的定义和用法
2014/05/05 Javascript
JavaScript使用键盘输入控制实现数字验证功能
2016/08/19 Javascript
Bootstrap的modal拖动效果
2016/12/25 Javascript
JavaScript实现的原生态兼容IE6可调可控滚动文字功能详解
2017/09/19 Javascript
解决vue2.0 element-ui中el-upload的before-upload方法返回false时submit()不生效问题
2018/08/24 Javascript
vue中使用 pako.js 解密 gzip加密字符串的方法
2019/06/10 Javascript
layUI实现三级导航菜单效果
2019/07/26 Javascript
微信小程序引入模块中wxml、wxss、js的方法示例
2019/08/09 Javascript
python不带重复的全排列代码
2013/08/13 Python
在Mac OS上部署Nginx和FastCGI以及Flask框架的教程
2015/05/02 Python
深入解析Python中的list列表及其切片和迭代操作
2016/03/13 Python
Python编程二分法实现冒泡算法+快速排序代码示例
2018/01/15 Python
简单易懂Pytorch实战实例VGG深度网络
2019/08/27 Python
python判断链表是否有环的实例代码
2020/01/31 Python
Django DRF路由与扩展功能的实现
2020/06/03 Python
一款利用html5和css3实现的3D滚动特效的教程
2015/01/04 HTML / CSS
HTML5本地存储之Web Storage详解
2016/07/04 HTML / CSS
日本PLST在线商店:日本时尚杂志刊载的人气服装
2016/12/10 全球购物
域名注册、建站工具、网页主机、SSL证书:Dynadot
2017/01/06 全球购物
办公室前台岗位职责范本
2013/12/10 职场文书
网络技术专业求职信
2014/02/18 职场文书
社会实践的活动方案
2014/08/22 职场文书
公司法人授权委托书范本
2014/09/12 职场文书
硕士学位申请报告
2015/05/15 职场文书
《鸡兔同笼》教学反思
2016/02/19 职场文书
导游词之张家口
2019/12/13 职场文书
带你学习MySQL执行计划
2021/05/31 MySQL
Python之Matplotlib绘制热力图和面积图
2022/04/13 Python