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实现的Email中的收件人效果(按del键删除)
Mar 20 Javascript
jQuery 文本框得失焦点的简单实例
Feb 19 Javascript
javascript实时显示北京时间的方法
Mar 12 Javascript
浅谈被jQuery抛弃的函数及替代函数
May 03 Javascript
简单实现Vue的observer和watcher
Dec 21 Javascript
基于jQuery封装的分页组件
Jun 26 jQuery
详解从Vue.js源码看异步更新DOM策略及nextTick
Oct 11 Javascript
手把手教你用Node.js爬虫爬取网站数据的方法
Jul 05 Javascript
详解如何实现Element树形控件Tree在懒加载模式下的动态更新
Apr 25 Javascript
详解VUE Element-UI多级菜单动态渲染的组件
Apr 25 Javascript
ES6 Iterator接口和for...of循环用法分析
Jul 31 Javascript
JavaScript 中for/of,for/in 的详细介绍
Nov 17 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中使用Akismet防止垃圾评论的代码
2011/06/10 PHP
php中删除数组的第一个元素和最后一个元素的函数
2015/03/07 PHP
PHP基于DateTime类解决Unix时间戳与日期互转问题【针对1970年前及2038年后时间戳】
2018/06/13 PHP
分享十五个最佳jQuery 幻灯插件和教程
2010/03/27 Javascript
jquery限定文本框只能输入数字即整数和小数
2013/11/29 Javascript
jquery中html、val与text三者属性取值的联系与区别介绍
2013/12/29 Javascript
原生JS和JQuery动态添加、删除表格行的方法
2015/05/28 Javascript
jQuery原生的动画效果
2015/07/10 Javascript
自己封装的一个原生JS拖动方法(推荐)
2016/11/22 Javascript
jQuery内容筛选选择器实例代码
2017/02/06 Javascript
js/jq仿window文件夹移动/剪切/复制等操作代码
2017/03/08 Javascript
mac下的nodejs环境安装的步骤
2017/05/24 NodeJs
在一般处理程序(ashx)中弹出js提示语
2017/08/16 Javascript
javascript将url解析为json格式的两种方法
2017/08/18 Javascript
利用pm2部署多个node.js项目的配置教程
2017/10/22 Javascript
分析JS中this引发的bug
2017/12/12 Javascript
web前端vue之vuex单独一文件使用方式实例详解
2018/01/11 Javascript
vue2 设置router-view默认路径的实例
2018/09/20 Javascript
nuxt踩坑之Vuex状态树的模块方式使用详解
2019/09/06 Javascript
javascript移动端 电子书 翻页效果实现代码
2019/09/07 Javascript
[00:56]跨越时空加入战场 全新祈求者身心“失落奇艺侍祭”展示
2019/07/20 DOTA
总结用Pdb库调试Python的方式及常用的命令
2016/08/18 Python
Python 实现一行输入多个值的方法
2018/04/21 Python
python删除字符串中指定字符的方法
2018/08/13 Python
python+webdriver自动化环境搭建步骤详解
2019/06/03 Python
Python 中Django验证码功能的实现代码
2019/06/20 Python
Python 爬虫实现增加播客访问量的方法实现
2019/10/31 Python
pycharm激活码有效到2020年11月底
2020/09/18 Python
PyCharm MySQL可视化Database配置过程图解
2020/06/09 Python
巴西宠物店在线:Geração Pet
2017/05/31 全球购物
法国高保真音响和家庭影院商店:Son Video
2019/04/26 全球购物
会计毕业自我鉴定
2014/02/05 职场文书
小学教师自我剖析材料
2014/09/29 职场文书
党员查摆剖析材料
2014/10/10 职场文书
党员对十八届四中全会的期盼思想汇报范文
2014/10/17 职场文书
如何Python使用re模块实现okenizer
2022/04/30 Python