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 相关文章推荐
国外大牛IE版本检测!现在IE都到9了,IE检测代码
Jan 04 Javascript
js和php如何获取当前url的内容
Sep 22 Javascript
css3元素简单的闪烁效果实现(html5 jquery)
Dec 28 Javascript
JS批量修改PS中图层名称的方法
Jan 26 Javascript
快速移动鼠标触发问题及解决方法(ECharts外部调用保存为图片操作及工作流接线mouseenter和mouseleave)
Aug 29 Javascript
Bootstrap select多选下拉框实现代码
Dec 23 Javascript
微信小程序调用PHP后台接口 解析纯html文本
Jun 13 Javascript
使用D3.js构建实时图形的示例代码
Aug 28 Javascript
vue下载excel的实现代码后台用post方法
May 10 Javascript
jQuery控制input只能输入数字和两位小数的方法
May 16 jQuery
React中Ref 的使用方法详解
Apr 28 Javascript
vue vant中picker组件的使用
Nov 03 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
写一个用户在线显示的程序
2006/10/09 PHP
PHP Memcached应用实现代码
2010/02/08 PHP
PHP var_dump遍历对象属性的函数与应用代码
2010/06/04 PHP
用PHP的socket实现客户端到服务端的通信实例详解
2017/02/04 PHP
PHP+Apache环境中如何隐藏Apache版本
2017/11/24 PHP
javascript学习随笔(使用window和frame)的技巧
2007/03/08 Javascript
js querySelector和getElementById通过id获取元素的区别
2012/04/20 Javascript
jQuery操作 input type=checkbox的实现代码
2012/06/14 Javascript
JS判定是否原生方法
2013/07/22 Javascript
javascript向后台传送相同属性的参数即数组参数
2014/02/17 Javascript
谈谈我对JavaScript原型和闭包系列理解(随手笔记8)
2015/12/24 Javascript
JQuery ztree 异步加载实例讲解
2016/02/25 Javascript
使用jQuery Mobile框架开发移动端Web App的入门教程
2016/05/17 Javascript
AngularJS入门教程之与服务器(Ajax)交互操作示例【附完整demo源码下载】
2016/11/02 Javascript
js移动焦点到最后位置的简单方法
2016/11/25 Javascript
详解node-ccap模块生成captcha验证码
2017/07/01 Javascript
[js高手之路]从原型链开始图解继承到组合继承的产生详解
2017/08/28 Javascript
Vue父子模版传值及组件传值的三种方法
2017/11/27 Javascript
Vue拖拽组件列表实现动态页面配置功能
2019/06/17 Javascript
如何使用JavaScript实现栈与队列
2019/06/24 Javascript
JavaScript实现滑块验证解锁
2021/01/07 Javascript
[06:16]《DAC最前线》之地区预选赛全面回顾
2015/01/19 DOTA
[43:26]完美世界DOTA2联赛PWL S2 Forest vs Rebirth 第二场 11.20
2020/11/23 DOTA
讲解Python中的标识运算符
2015/05/14 Python
详解Python使用simplejson模块解析JSON的方法
2016/03/24 Python
Python3实现并发检验代理池地址的方法
2016/09/18 Python
Python2和Python3之间的str处理方式导致乱码的讲解
2019/01/03 Python
基于python的BP神经网络及异或实现过程解析
2019/09/30 Python
python中tkinter窗口位置\坐标\大小等实现示例
2020/07/09 Python
我的网上商城创业计划书
2013/12/26 职场文书
乡镇计划生育工作汇报
2014/10/28 职场文书
2014年宣传工作总结
2014/11/18 职场文书
销售经理助理岗位职责
2015/04/13 职场文书
2015民办小学年度工作总结
2015/05/26 职场文书
分析SQL窗口函数之聚合窗口函数
2022/04/21 Oracle
MySQL 语句执行顺序举例解析
2022/06/05 MySQL