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 相关文章推荐
jQuery 工具函数学习资料
Apr 29 Javascript
javascript数字数组去重复项的实现代码
Dec 30 Javascript
用Node.js通过sitemap.xml批量抓取美女图片
May 28 Javascript
AngularJs基于角色的前端访问控制的实现
Nov 07 Javascript
js编写三级联动简单案例
Dec 21 Javascript
javascript稀疏数组(sparse array)和密集数组用法分析
Dec 28 Javascript
js从输入框读取内容,比较两个数字的大小方法
Mar 13 Javascript
关于jquery中attr()和prop()方法的区别
May 28 jQuery
js删除对象/数组中null、undefined、空对象及空数组方法示例
Nov 14 Javascript
vue-router重定向和路由别名的使用讲解
Jan 19 Javascript
vue使用高德地图根据坐标定位点的实现代码
Aug 22 Javascript
vue中@change兼容问题详解
Oct 25 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随机生成随机个数的字母组合示例
2014/01/14 PHP
php实现网站顶踩功能的完整前端代码
2015/07/19 PHP
ThinkPHP模板Volist标签嵌套循环输出多维数组的方法
2016/03/23 PHP
PHP下载远程图片的几种方法总结
2017/04/07 PHP
PHP中用Trait封装单例模式的实现
2019/12/18 PHP
PHP7 foreach() 函数修改
2021/03/09 PHP
jQuery-onload让第一次页面加载时图片是淡入方式显示
2012/05/23 Javascript
js获取location.href的参数实例代码
2013/08/02 Javascript
js实现幻灯片效果(基于jquery插件)
2013/11/05 Javascript
删除节点的jquery代码
2014/01/13 Javascript
js取float型小数点后两位数的方法
2014/01/18 Javascript
jQuery实现可用于博客的动态滑动菜单完整实例
2015/09/17 Javascript
原生js实现自由拖拽弹窗代码demo
2016/06/29 Javascript
JavaScript页面实时显示当前时间实例代码
2016/10/23 Javascript
详解jQuery中基本的动画方法
2016/12/14 Javascript
微信小程序商城项目之淘宝分类入口(2)
2017/04/17 Javascript
Python中下划线的使用方法
2015/03/27 Python
教你利用Python玩转histogram直方图的五种方法
2018/07/30 Python
Python完成哈夫曼树编码过程及原理详解
2019/07/29 Python
Django使用中间件解决前后端同源策略问题
2019/09/02 Python
在Pytorch中使用Mask R-CNN进行实例分割操作
2020/06/24 Python
Python实现删除某列中含有空值的行的示例代码
2020/07/20 Python
Django如何实现密码错误报错提醒
2020/09/04 Python
解决img标签上下出现间隙的方法
2016/12/14 HTML / CSS
Farfetch台湾官网:奢侈品牌时尚购物平台
2019/06/17 全球购物
我的applet原先好好的, 一放到web server就会有问题,为什么?
2016/05/10 面试题
学校大课间活动方案
2014/01/30 职场文书
绘画专业自荐信范文
2014/02/23 职场文书
2014国培学习感言
2014/03/05 职场文书
小学国旗下的演讲稿
2014/08/28 职场文书
2014年大学生工作总结
2014/11/20 职场文书
七年级上册语文教学计划
2015/01/22 职场文书
公证处委托书
2015/01/28 职场文书
护士医德医风心得体会
2016/01/25 职场文书
又涨知识了,自律到底多重要?
2019/06/27 职场文书
MySQL优化之如何写出高质量sql语句
2021/05/17 MySQL