zoukankan      html  css  js  c++  java
  • jquery插件开发;(function ( $, window, document, undefined ){}(jQuery, window,document)分析

    经常看到许多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》
                  

  • 相关阅读:
    petshop4.0 详解之三(PetShop数据访问层之消息处理)
    MemberShip的使用
    PetShop 详解之一 系统架构设计
    PetShop4,错误提示:没有为 SQL 缓存通知启用数据库"MyCard"
    PetShop4,错误提示:System.Web.Security.SqlMembershipProvider”要求一个与架构版本“1”兼容的数据
    【Linux从零开始】:1.文件与目录的管理和配置(1)
    【笔记】在.NET中使用强类型有以下优点:
    【好文收藏】:Linq to DataSet
    【好文收藏】泛型与非泛型的比较(百度文库)
    HDOJ1102 Constructing Roads[Prim()]
  • 原文地址:https://www.cnblogs.com/baiJr/p/6135979.html
Copyright © 2011-2022 走看看