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代码格式化和语法着色V2
Oct 14 Javascript
Package.js  现代化的JavaScript项目make工具
May 23 Javascript
jquery动画2.元素坐标动画效果(创建一个图片走廊)
Aug 24 Javascript
JS 实现Json查询的方法实例
Apr 12 Javascript
Javascript获取HTML静态页面参数传递值示例
Aug 18 Javascript
使用JavaScript的ActiveXObject对象检测应用程序是否安装的方法
Apr 15 Javascript
JS定义网页表单提交(submit)的方法
Mar 20 Javascript
JS简单实现仿百度控制台输出信息效果
Sep 04 Javascript
详解照片瀑布流效果(js,jquery分别实现与知识点总结)
Jan 01 Javascript
cnpm加速Angular项目创建的方法
Sep 07 Javascript
bootstrap table.js动态填充单元格数据的多种方法
Jul 18 Javascript
Vue formData实现图片上传
Aug 20 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中try{}catch{}的使用方法
2016/12/09 PHP
php 根据自增id创建唯一编号类
2017/04/06 PHP
javascript模版引擎-tmpl的bug修复与性能优化分析
2011/10/23 Javascript
IE与FireFox的JavaScript兼容问题解决办法
2013/12/31 Javascript
jquery库文件略庞大用纯js替换jquery的方法
2014/08/12 Javascript
Node.js异步I/O学习笔记
2014/11/04 Javascript
JS点击链接后慢慢展开隐藏着图片的方法
2015/02/17 Javascript
jQuery打字效果实现方法(附demo源码下载)
2015/12/18 Javascript
详解JavaScript时间格式化
2015/12/23 Javascript
jQuery使用cookie与json简单实现购物车功能
2016/04/15 Javascript
JavaScript 函数模式详解及示例
2016/09/07 Javascript
jQuery点击头像上传并预览图片
2017/02/23 Javascript
微信小程序获取循环元素id以及wx.login登录操作
2017/08/17 Javascript
bootstrap轮播模板使用方法详解
2017/11/17 Javascript
ajax前台后台跨域请求处理方式
2018/02/08 Javascript
JavaScript正则表达式函数总结(常用)
2018/02/22 Javascript
JavaScript设计模式之责任链模式实例分析
2019/01/16 Javascript
vue实现按需加载组件及异步组件功能
2019/05/27 Javascript
详解简单易懂的 ES6 Iterators 指南和示例
2019/09/24 Javascript
简单了解前端渐进式框架VUE
2020/07/20 Javascript
[02:43]DOTA2英雄基础教程 圣堂刺客
2013/12/09 DOTA
[46:28]EG vs Liquid 2019国际邀请赛淘汰赛 败者组 BO3 第二场 8.23
2019/09/05 DOTA
Python实现一个简单的MySQL类
2015/01/07 Python
Python3 replace()函数使用方法
2018/03/19 Python
利用python list完成最简单的DB连接池方法
2019/08/09 Python
Django模板标签{% for %}循环,获取制定条数据实例
2020/05/14 Python
Python中的全局变量如何理解
2020/06/04 Python
关于python3.9安装wordcloud出错的问题及解决办法
2020/11/02 Python
浅谈amaze-ui中datepicker和datetimepicker注意的几点
2020/08/21 HTML / CSS
英国快时尚女装购物网站:PrettyLittleThing
2018/08/15 全球购物
文秘专业毕业生就业推荐信
2013/11/08 职场文书
工程力学硕士生的自我评价范文
2013/11/16 职场文书
授权委托书范本
2014/04/03 职场文书
大学生就业自荐书
2014/06/16 职场文书
婚宴祝酒词大全
2015/08/10 职场文书
2016应届毕业生就业指导课心得体会
2016/01/15 职场文书