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 相关文章推荐
JavaScript实现在数组中查找不同顺序排列的字符串
Sep 26 Javascript
jQuery实现时尚漂亮的弹出式对话框实例
Aug 07 Javascript
Jquery Mobile 自定义按钮图标
Nov 18 Javascript
详解AngularJS控制器的使用
Mar 09 Javascript
js获取当前年月日-YYYYmmDD格式的实现代码
Jun 01 Javascript
jQuery操作cookie
Aug 08 Javascript
JavaScript 对象详细整理总结
Sep 29 Javascript
对Angular.js Controller如何进行单元测试
Oct 25 Javascript
详解vue2.0组件通信各种情况总结与实例分析
Mar 22 Javascript
BootStrap中jQuery插件Carousel实现轮播广告效果
Mar 27 jQuery
JS常见面试试题总结【去重、遍历、闭包、继承等】
Aug 27 Javascript
vue.js实现三级菜单效果
Oct 19 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+ajax 无刷新删除数据
2010/02/20 PHP
PHP中foreach循环中使用引用要注意的地方
2011/01/02 PHP
php中explode与split的区别介绍
2012/10/03 PHP
php 目录遍历、删除 函数的使用介绍
2013/04/28 PHP
基于PHP创建Cookie数组的详解
2013/07/03 PHP
Codeigniter框架的更新事务(transaction)BUG及解决方法
2014/07/25 PHP
Date对象格式化函数代码
2010/07/17 Javascript
JQuery与JS里submit()的区别示例介绍
2014/02/17 Javascript
深入了解Node.js中的一些特性
2014/09/25 Javascript
jQuery幻灯片特效代码分享--鼠标滑过按钮时切换(2)
2020/11/18 Javascript
基于JQuery实现仿网易邮箱全屏动感滚动插件fullPage
2015/09/20 Javascript
JavaScript知识点总结(五)之Javascript中两个等于号(==)和三个等于号(===)的区别
2016/05/31 Javascript
JS实现保留n位小数的四舍五入问题示例
2016/08/03 Javascript
javascript淘宝主图放大镜功能
2016/10/20 Javascript
微信小程序之数据缓存的实例详解
2017/09/29 Javascript
基于jQuery实现定位导航位置效果
2017/11/15 jQuery
在vue中读取本地Json文件的方法
2018/09/06 Javascript
详解基于vue-cli3快速发布一个fullpage组件
2019/03/08 Javascript
在vue项目中使用codemirror插件实现代码编辑器功能
2019/08/27 Javascript
[43:26]完美世界DOTA2联赛PWL S2 Forest vs Rebirth 第二场 11.20
2020/11/23 DOTA
python基础教程之基本内置数据类型介绍
2014/02/20 Python
python版学生管理系统
2018/01/10 Python
python3基于TCP实现CS架构文件传输
2018/07/28 Python
python生成lmdb格式的文件实例
2018/11/08 Python
Python脚本操作Excel实现批量替换功能
2019/11/20 Python
Django 设置多环境配置文件载入问题
2020/02/25 Python
解决pyinstaller 打包exe文件太大,用pipenv 缩小exe的问题
2020/07/13 Python
Django自定义YamlField实现过程解析
2020/11/11 Python
阳光体育:Sunny Sports(购买露营和远足设备)
2018/08/07 全球购物
数组越界问题
2015/10/21 面试题
DataList 能否分页,请问如何实现?
2015/05/03 面试题
总经理秘书的岗位职责
2013/12/27 职场文书
居委会四风问题个人对照检查材料
2014/09/25 职场文书
2014年宣传思想工作总结
2014/12/10 职场文书
2015年公务员个人工作总结
2015/04/24 职场文书
微信早安问候语
2015/11/10 职场文书