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支持firefox,ie7页面布局拖拽效果代码
Dec 20 Javascript
dojo学习第一天 Tab选项卡 实现
Aug 28 Javascript
jquery乱码与contentType属性设置问题解决方案
Jan 07 Javascript
js replace正则表达式应用案例讲解
Jan 17 Javascript
javascript计算用户打开网页的停留时间
Jan 09 Javascript
js用typeof方法判断undefined类型
Jul 15 Javascript
jQuery前端框架easyui使用Dialog时bug处理
Dec 05 Javascript
JS实现超精简响应鼠标显示二级菜单代码
Sep 12 Javascript
不得不看之JavaScript构造函数及new运算符
Aug 21 Javascript
前端html中jQuery实现对文本的搜索功能并把搜索相关内容显示出来
Nov 14 jQuery
微信小程序实现分享朋友圈的图片功能示例
Jan 18 Javascript
vue实现将一个数组内的相同数据进行合并
Nov 07 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/06 新手入门
php下实现折线图效果的代码
2007/04/28 PHP
php注销代码(session注销)
2012/05/31 PHP
php使用pdo连接并查询sql数据库的方法
2014/12/24 PHP
PHP如何将log信息写入服务器中的log文件
2015/07/29 PHP
PHP登录验证码的实现与使用方法
2016/07/07 PHP
thinkphp5 URL和路由的功能详解与实例
2017/12/26 PHP
调试php程序的简单步骤
2019/10/04 PHP
获取Javscript执行函数名称的方法
2006/12/22 Javascript
使用prototype.js进行异步操作
2007/02/07 Javascript
用js查找法实现当前栏目的高亮显示的代码
2007/11/24 Javascript
js 设置选中行的样式的实现代码
2010/05/24 Javascript
一些javascript一些题目的解析
2010/12/25 Javascript
jQuery日程管理插件fullcalendar使用详解
2017/01/07 Javascript
详解Vue单元测试Karma+Mocha学习笔记
2018/01/31 Javascript
Vue 实现列表动态添加和删除的两种方法小结
2018/09/07 Javascript
js实现多个倒计时并行 js拼团倒计时
2019/02/25 Javascript
原生js实现可兼容PC和移动端的拖动滑块功能详解【测试可用】
2019/08/15 Javascript
Python实现计算文件夹下.h和.cpp文件的总行数
2015/04/23 Python
Python 中开发pattern的string模板(template) 实例详解
2017/04/01 Python
DataFrame:通过SparkSql将scala类转为DataFrame的方法
2019/01/29 Python
python sort、sort_index方法代码实例
2019/03/28 Python
Python如何爬取微信公众号文章和评论(基于 Fiddler 抓包分析)
2019/06/28 Python
python 安装impala包步骤
2020/03/28 Python
使用python求斐波那契数列中第n个数的值示例代码
2020/07/26 Python
DAWGS鞋官方网站:鞋,凉鞋,靴子
2016/10/04 全球购物
Links of London官方网站:英国标志性的珠宝品牌
2017/04/09 全球购物
全球最大的房车租赁市场:Outdoorsy
2018/09/19 全球购物
求职自荐书范文
2013/12/04 职场文书
幼儿园校车司机的岗位职责
2014/01/30 职场文书
水电工岗位职责
2014/02/12 职场文书
2015元旦晚会主持人开场白+结束语
2014/12/14 职场文书
办公室主任个人总结
2015/02/28 职场文书
青年岗位能手事迹材料(2016推荐版)
2016/03/01 职场文书
面试提问mysql一张表到底能存多少数据
2022/03/13 MySQL
Python&Matlab实现樱花的绘制
2022/04/07 Python