经常看到许多jquery插件是这种形式:

;(function( $, window, document, undefined ){}){//...code
}(jquery,window,document)

一开始自己也是不太清楚,后台查了许多资料博客,基本了解大意,所以总结出来,以供之后查阅更正。

1.自调函数(function(){})()

这是一个自调函数,函数定义后自行调用。将匿名函数放在括号之内,并紧跟一个括号。第二个括号的意思是“立即调用”。同时第二个括号也是向匿名函数传递参数的地方。

比如:

(function(){alert(1);       //输出1
})();(function(name){alert(name);    //输出xiaoming
})("xiaoming");

使用自调匿名函数好处是不会产生任何全局变量。缺点是无法重复执行(除非放在某个循环或其他函数中)。因此,匿名自调函数适合只执行一次性或初始化的任务。对于插件来说,这种定义方式,既不会产生全局变量,同时引入一次就够了。
据此回到插件的这种写法,可以理解为,该插件需要传入jquery,window,document,undefinded;几个参数作用为:

(a)$实参:$是jquery的简写,很多方法和类库也使用$,这里$接受jQuery对象,也是为了避免$变量冲突,保证插件可以正常运行。

(b)window, document实参分别接受window, document对象,window, document对象都是全局环境下的,而在函数体内的window, document其实是局部变量,不是全局的window, document对象。这样做有个好处就是可以提高性能,减少作用域链的查询时间,如果你在函数体内需要多次调用window 或 document对象,这样把window 或 document对象当作参数传进去,这样做是非常有必要的。当然如果你的插件用不到这两个对象,那么就不用传递这两个参数了。

(c)最后剩下一个undefined形参了,那么这个形参是干什么用的呢,看起来是有点多余。undefined在老一辈的浏览器是不被支持的,直接使用会报错,js框架要考虑到兼容性,因此增加一个形参undefined

2.“;”分号作用:防止多个文件压缩合并以为其他文件最后一行语句没加分号,而引起合并后的语法错误。

总结:插件这种形式,本质就是定义一个匿名自调函数,同时为了提高性能或者兼容性,增加了“;”传入jquery,window,document,undefinded参数。

参考资料:《javascript面向对象编程》Stoyan Stefanov著;

《高性能javascript》

转载于:https://www.cnblogs.com/baiJr/p/6135979.html

jquery插件开发;(function ( $, window, document, undefined ){}(jQuery, window,document)分析相关推荐

  1. jQuery插件开发(一):jQuery类方法

    一.jQuery插件开发的方法 jQuery插件的编写方法主要有两种: 1.基于jQuery对象的插件 2.基于jQuery类的插件 二.基于jQuery类的插件 1.什么是jQuery类的插件? j ...

  2. jQuery中$(document).ready()和window.onload的区别

     $(document) ready()和window onload在表面上看都是页面加载时我们就去执行一个函数或动作,但是在具体的细节上$(document) ready()和window onlo ...

  3. js中window.onload 与 jquery中$(document.ready()) 测试

    js中window.onload 与 jquery中$(document.ready())区别,验证代码如下(调换js代码和Jquer代码书写顺序测试,运行结果一样,因此与代码书写位置没关系): &l ...

  4. jquery $(document).ready()与window.onload的区别

    jQuery中$(document).ready()的作用类似于传统JavaScript中的window.onload方法,不过与window.onload方法还是有区别的. 1.执行时间 windo ...

  5. jquery 中 $(document).ready() 与window.onload 的区别

    Jquery中$(document).ready()的作用类似于传统JavaScript中的window.onload方法,不过与window.onload方法还是有区别的. 1.执行时间 windo ...

  6. jquery (js中window.onload与jquery中$(document.ready())的区别)

    jquery 学习之一(js中window.onload与jquery中$(document.ready())的区别) 耳听为虚,眼见为实.通过下面的实例可查看两者的异同(注意:aa.jpg最好是一张 ...

  7. jQuery中$(document).ready()和window.onload的区别?

    document.ready和document.load的区别?(JQ中的$(document).ready()和window.onload的区别?) window.onload,是采用DOM0级事件 ...

  8. js中的window.onload和jquery中的load区别的讲解

    JavaScript 中的以下代码 [javascript] view plaincopyprint? Window.onload = function (){      // 编写代码 } Wind ...

  9. 【js的window.onload和jquery的.ready()什么区别】

    JavaScript中的window.onload和jQuery中的.ready()都是页面加载完成后执行的事件处理函数,用于在页面加载完成后执行一些JavaScript代码.它们之间的主要区别如下: ...

最新文章

  1. 实例详解 DB2 排序监控和调优
  2. wcf服务和寄主的关系
  3. HTTP/2笔记之连接建立
  4. Hard Calculation 模拟(200)
  5. MySQL数据库-笔记05【查询练习题*25道(附解析)】
  6. Python小游戏(并夕夕版飞机大战)
  7. shiro反序列化工具_Apache Shiro 1.2.4反序列化漏洞(CVE-2016-4437)源码解析
  8. 阿里云服务器被[kthreaddi]挖矿病毒攻击
  9. 第3章 动态规划 矩阵连乘问题
  10. meterpreter里面cmd乱码解决方法chcp 65001
  11. Matlab版本svm工具箱,matlab libsvm工具箱
  12. tap10.app cn.html,Tap连点器
  13. mac关闭当前窗口快捷键,mac关闭当前应用快捷键
  14. CVE-2014-6271 “破壳“ 漏洞
  15. LORA芯片ASR6505无线远距离传输8位MCU
  16. 黑果安装步骤(手把手教你如何安装黑苹果)
  17. C++异常之栈解旋(unwinding)
  18. OpenGL API - 笔记汇总
  19. session与登录机制
  20. 【数据集NO.3】人脸识别数据集汇总

热门文章

  1. 如何实现拼音与汉字的互相转换
  2. 基于HTTP Live Streaming(HLS) 搭建在线点播系统
  3. 【Linux系统编程】快速查找errno错误码信息
  4. 【JavaScript】核心语法之数组
  5. Python通过future处理并发
  6. Oracle 11g数据库的部署
  7. Graph Search图谱搜索
  8. php设计模式中的类型安全 指--只接受特定的对象 ---以避免发生错误
  9. 爬虫采集-基于webkit核心的客户端Ghost.py [爬虫实例]
  10. linux下mdadm创建软件RAID