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 相关文章推荐
innertext , insertadjacentelement , insertadjacenthtml , insertadjacenttext 等区别
Jun 29 Javascript
javascript 获取所有id中包含某关键字的控件的实现代码
Nov 25 Javascript
jquery教程ajax请求json数据示例
Jan 13 Javascript
js 去除字符串第一位逗号的方法
Jun 07 Javascript
关于javaScript注册click事件传递参数的不成功问题
Jul 18 Javascript
JavaScript_object基础入门(必看篇)
Jun 13 Javascript
jquery把int类型转换成字符串类型的方法
Oct 07 Javascript
js实现倒计时及时间对象
Nov 15 Javascript
微信小程序 页面传参实例详解
Nov 16 Javascript
bootstrap 表单验证使用方法
Jan 11 Javascript
Node.js中用D3.js的方法示例
Jan 16 Javascript
vue实现百度搜索功能
Dec 28 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
收音机指标测试方法及仪器
2021/03/01 无线电
深入探讨<br />和 \r\n两者有什么区别??
2013/06/05 PHP
使用phpQuery获取数组的实例
2017/03/13 PHP
ThinkPHP3.2框架操作Redis的方法分析
2019/05/05 PHP
jQuery选择器中含有空格的使用示例及注意事项
2013/08/25 Javascript
js写的评论分页(还不错)
2013/12/23 Javascript
JavaScript函数定义的常见注意事项小结
2014/09/16 Javascript
javascript给span标签赋值的方法
2015/11/26 Javascript
js手动播放图片实现图片轮播效果
2016/09/17 Javascript
easy ui datagrid 从编辑框中获取值的方法
2017/02/22 Javascript
微信小程序获取用户openId的实现方法
2017/05/23 Javascript
JS设计模式之观察者模式实现实时改变页面中金额数的方法
2018/02/05 Javascript
vue3.0 CLI - 2.2 - 组件 home.vue 的初步改造
2018/09/14 Javascript
微信小程序使用swiper组件实现层叠轮播图
2018/11/04 Javascript
微信小程序实现卡片层叠滑动效果
2019/06/21 Javascript
vue项目实现图片上传功能
2019/12/23 Javascript
JS如何实现网站中PC端和手机端自动识别并跳转对应的代码
2020/01/08 Javascript
修改NPM全局模式的默认安装路径的方法
2020/12/15 Javascript
Python实现自动发送邮件功能
2021/03/02 Python
Python面向对象class类属性及子类用法分析
2018/02/02 Python
Python常见字典内建函数用法示例
2018/05/14 Python
谈一谈基于python的面向对象编程基础
2019/05/21 Python
Windows下pycharm创建Django 项目(虚拟环境)过程解析
2019/09/16 Python
python实现一个猜拳游戏
2020/04/05 Python
canvas学习笔记之绘制简单路径
2019/01/28 HTML / CSS
巴西独家产品和现场演示购物网站:Shoptime
2019/07/11 全球购物
Vans澳大利亚官网:购买鞋子、服装及配件
2019/09/05 全球购物
30年同学聚会邀请函
2014/01/25 职场文书
县优秀教师事迹材料
2014/01/31 职场文书
餐厅经理岗位职责范本
2014/02/17 职场文书
秋季运动会广播稿
2014/02/22 职场文书
好书伴我成长演讲稿
2014/05/14 职场文书
学校法制宣传月活动总结
2014/07/03 职场文书
不遵守课堂纪律的检讨书
2014/09/24 职场文书
2015年小学美术工作总结
2015/05/25 职场文书
Mysql Show Profile
2021/04/05 MySQL