zoukankan      html  css  js  c++  java
  • ;(function( $, window, undefined ){ }(jQuery,window))为何需要往里面传$,window,undefined这些参数

    (function( $, jQuery , undefined ) {})(jQuery); 为什么要将window和undefined作为参数传给它?

    因为 ecmascript 执行JS代码是从里到外,因此把全局变量window或jQuery对象传进来,就避免了到外层去寻找,提高效率。undefined在老一辈的浏览器是不被支持的,直接使用会报错,js框架要考虑到兼容性,因此增加一个形参undefined。

    var undefined = 8;  
    (function( window ) {   
        alert(window.undefined); // 8  
        alert(undefined); // 8  
    })(window);  
    var undefined = 8;  
    (function( window, undefined ) {   
        alert(window.undefined);  // 8  
        alert(undefined); // 此处undefined参数为局部的名称为undefined变量,值为undefined  
    })(window);  

    区分上述两种方式:第一种每个语句都要去找一次window。第二种将window作为参数传递过去,是的不要每个语句都去找window,应该是提高了效率。 所以后者,就算外面的人把 undefined 定义了,里面的 undefined 依然不受影响。大概是为了最大程度防止外界的变量定义对所做封装的内部造成影响吧。

     原文参考自站长网http://www.software8.co/wzjs/Javascript/2525.html

    //方式一  
    (function(undefined ) {  
       window.property1 = ……;  
       window.property2 = ……;  
       ……  
    })();  
    //方式二  
    (function( window, undefined ) {  
        ... // code goes here  
      
    })(window);  
    //方式三  
    (function(undefined ) {  
       var tmp = window;  
       tmp.property1 = ……;  
       tmp.property2 = ……;  
       ……  
    })();  

    方式一的效率明显最低,方式二和方式三应该差不多。将window作为参数传递进去就可以让代码里面的语句可以直接用参数中的window,而不用再去找最外层的对象。假如要在函数中为window再设置 100000个属性,用参数传递过去只需要找一次最外层对象。不用参数传递,用到window的语句都要去找一次最外层对象。

    工作并不只是为了那点工资,而是为了创造一份属于自己的事业
  • 相关阅读:
    计算机科学导论 笔记四 【机械工业出版社-原书第二版】
    计算机科学导论 笔记三(2) 【机械工业出版社-原书第二版】
    计算机科学导论 笔记三(1) 【机械工业出版社-原书第二版】
    Maya入门笔记一 用户界面
    大数据分析技术【超星尔雅课后题】
    DNS服务 实验
    区分"研发支出"、"开发支出"、"研发费用"
    关于stata中我们常用到的对数化处理
    线性回归——Lasso回归和岭回归
    ROC曲线
  • 原文地址:https://www.cnblogs.com/zouer/p/4242340.html
Copyright © 2011-2022 走看看