• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >JavaScript > javascript自执行函数

javascript自执行函数

作者:yanhangtian 字体:[增加 减小] 来源:互联网 时间:2017-05-11

yanhangtian通过本文主要向大家介绍了javascript自定义函数,javascript的全局函数,javascript split函数,javascript构造函数,javascript回调函数等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com
function (window, $, undefined) {
 play=function(){
  $("#demo").val("This is a demo.");
 }
 window.wbLogin = play;
})(window, jQuery);
</div>

像上边这样的代码为什么要把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'也是因为这个原因。

以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,同时也希望多多支持!

</div>
分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • JavaScript 函数的定义-调用、注意事项
  • javascript自执行函数
  • Javascript自定义事件详解

相关文章

  • 2017-05-11jQuery动态移除和添加背景图片的方法详解
  • 2017-05-11微信小程序 高德地图SDK详解及简单实例(源码下载)
  • 2017-05-11原生JavaScript实现Tooltip浮动提示框特效
  • 2017-05-11Bootstrap table右键功能实现方法
  • 2017-09-11JavaScript中变量与作用域
  • 2017-05-11jQuery中DOM节点的删除方法总结(超全面)
  • 2017-05-11Node.js数据库操作之查询MySQL数据库(二)
  • 2017-05-11AngularJS封装$http.post()实例详解
  • 2017-05-11详解NodeJS框架express的路径映射(路由)功能及控制
  • 2018-11-02js判断对象是否为空对象的几种方法

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • Vuejs 组件——props数据传递的实例代码
    • JavaScript ES6中export、import与export default的用法和区别
    • jQuery中animate()的使用方法及解决$(”body“).animate({“scrollTop”:top})不被Firefox支持的问题
    • 详解NodeJs支付宝移动支付签名及验签
    • 浅析JavaScript中var that=this
    • JavaScript中双向数据绑定详解
    • 从零开始学习Node.js系列教程四:多页面实现数学运算的client端和server端示例
    • Google 爬虫如何抓取 JavaScript 的内容
    • 利用transition实现文字上下抖动的效果
    • nodeJs链接Mysql做增删改查的简单操作

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有