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 小练习(实例代码)
Aug 07 Javascript
JavaScript中实现块作用域的方法
Apr 01 Javascript
自己编写的类似JS的trim方法
Oct 09 Javascript
JavaScript实现SHA-1加密算法的方法
Mar 11 Javascript
分享自己用JS做的扫雷小游戏
Feb 17 Javascript
JS实现的自定义显示加载等待图片插件(loading.gif)
Jun 17 Javascript
深入浅析knockout源码分析之订阅
Jul 12 Javascript
详解利用exif.js解决ios手机上传竖拍照片旋转90度问题
Nov 04 Javascript
详解用node.js实现简单的反向代理
Jun 26 Javascript
微信小程序实现动态改变view标签宽度和高度的方法【附demo源码下载】
Dec 05 Javascript
Vue.js 使用v-cloak后仍显示变量的解决方法
Nov 19 Javascript
怎样在vue项目下添加ESLint的方法
May 16 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笔记之:初探PHPcms模块开发介绍
2013/04/26 PHP
php中出现空白页的原因及解决方法汇总
2014/07/08 PHP
mantis安装、配置和使用中的问题小结
2014/07/14 PHP
PHP Warning: Module 'modulename' already loaded in问题解决办法
2015/03/16 PHP
PHP计算当前坐标3公里内4个角落的最大最小经纬度实例
2016/02/26 PHP
PHP中单例模式与工厂模式详解
2017/02/17 PHP
PHP中OpenSSL加密问题整理
2017/12/14 PHP
PHP fopen中文文件名乱码问题解决方案
2020/10/28 PHP
javascript options属性集合操作代码
2009/12/28 Javascript
javascript实现字符串反转的方法
2015/02/05 Javascript
JavaScript实现添加、查找、删除元素
2015/07/02 Javascript
在localStorage中存储对象数组并读取的方法
2016/09/24 Javascript
JavaScript中document.referrer的用法详解
2017/07/04 Javascript
详解Vue基于vue-quill-editor富文本编辑器使用心得
2019/01/03 Javascript
JS绘图Flot应用图形绘制异常解决方案
2020/10/16 Javascript
python实现文本去重且不打乱原本顺序
2016/01/26 Python
深入解析Python中的线程同步方法
2016/06/14 Python
python实时分析日志的一个小脚本分享
2017/05/07 Python
详解Python中的Numpy、SciPy、MatPlotLib安装与配置
2017/11/17 Python
python使用Plotly绘图工具绘制柱状图
2019/04/01 Python
pandas如何处理缺失值
2019/07/31 Python
python内存管理机制原理详解
2019/08/12 Python
Python类继承和多态原理解析
2020/02/05 Python
15款Python编辑器的优缺点,别再问我“选什么编辑器”啦
2020/10/19 Python
雷朋巴西官方商店:Ray-Ban Brasil
2020/07/21 全球购物
实习教师自我鉴定
2013/09/27 职场文书
绿色城市实施方案
2014/03/19 职场文书
表彰会主持词
2014/03/26 职场文书
责任胜于能力演讲稿
2014/05/20 职场文书
办理信用卡收入证明范例
2014/09/13 职场文书
教师政风行风评议心得体会
2014/10/21 职场文书
护理见习报告范文
2014/11/03 职场文书
医德医风个人工作总结2014
2014/11/14 职场文书
2016廉洁教育心得体会
2016/01/20 职场文书
Python爬虫:从m3u8文件里提取小视频的正确操作
2021/05/14 Python
四十九个javascript小知识实用技巧
2021/11/20 Javascript