关于(function( window, undefined ) {})(window)写法的理解

转载 2015年11月19日 15:14:22

JS 关于(function( window, undefined ) {})(window)写法的理解 [网络整理]

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

(function( $, undefined ) {})(jQuery); 同理

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

还有,不要用window.undefined传递给形参,有可能window.undefined被其他人修改了,最好就是甚么都不传,形参的undefined就是真正的undefined了。

Js代码 : 
  1. var undefined = 8;  
  2. (function( window ) {   
  3.     alert(window.undefined); // 8  
  4.     alert(undefined); // 8  
  5. })(window);  

 

Js代码 : 
  1. var undefined = 8;  
  2. (function( window, undefined ) {   
  3.     alert(window.undefined);  // 8  
  4.     alert(undefined); // 此处undefined参数为局部的名称为undefined变量,值为undefined  
  5. })(window);  

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

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

Js代码:  
  1. //方式一  
  2. (function(undefined ) {  
  3.    window.property1 = ……;  
  4.    window.property2 = ……;  
  5.    ……  
  6. })();  
  7. //方式二  
  8. (function( window, undefined ) {  
  9.     ... // code goes here  
  10.   
  11. })(window);  
  12. //方式三  
  13. (function(undefined ) {  
  14.    var tmp = window;  
  15.    tmp.property1 = ……;  
  16.    tmp.property2 = ……;  
  17.    ……  
  18. })();  

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

 

 

function ($, undefined){ })(jQuery)

 
规避用户对undefined进行定义,致使函数发生异常
 
(function ($, undefined){ })(jQuery)
如果用户
 
var undefined =xiaoyan;
(function ($, undefined){ })(jQuery) //这里就可以传个undefined的形参,避免上面的定义,只要没传值进去,undefined就不会被赋值

前段百科---JS中形如(function(window, undefined) {})(window)写法的理解

在Web开发过程中,往往会看到有人这样编写JS脚本: (function(window, undefined) { //do something })(window);可能有人会问:卧槽,这是...
  • u013390913
  • u013390913
  • 2016年12月31日 16:18
  • 1762

关于(function( window, undefined ) {})(window)写法的理解

(function( window, undefined ) {})(window); 这个,为什么要将window和undefined作为参数传给它? (function( $, und...
  • alex8046
  • alex8046
  • 2014年11月17日 17:59
  • 653

蛋疼的js 之函数篇 (function(window,undefined){code...})(window)

蛋疼的js 之函数篇 (function(window,undefined){code...}(window))      第一次在jQuery中看到这种写法,很是纠结这是什么意思。 ...
  • wll525775008
  • wll525775008
  • 2013年12月13日 17:53
  • 4283

JS 关于(function( window, undefined ) {})(window)写法的理解

(function( window, undefined ) {})(window); 这个,为什么要将window和undefined作为参数传给它? (function( $, undef...
  • orichisonic
  • orichisonic
  • 2016年01月14日 15:30
  • 469

JS中关于(function( window, undefined ) {})(window)写法的理解

在jquery中我们经常看到以下这段代码: ;(function ( $, window, document, undefined ){ //函数体内具体代码 })(jQuery, window...
  • Love_JavaProgram
  • Love_JavaProgram
  • 2013年05月15日 18:47
  • 2658

(function ($, undefined){ })(jQuery); 的使用及说明

细说;(function ($, undefined){ })(jQuery); 的使用: 1. 对于function前面的分号(;)的使用:使用分号的目的是为了防止多个文件压缩合并时,以为其他文件最...
  • LeeJay5
  • LeeJay5
  • 2015年01月20日 11:49
  • 1021

(function (window, undefined){})(window)

(转)最常见的闭包 (Closure) 范式大家都很熟悉了: 123 (function() {// ...})(); 很简单,大家都在用。但是,我们需要了解更多。 首...
  • h26111939
  • h26111939
  • 2016年05月13日 21:04
  • 199

(function (window, undefined){})(window)

来自:http://zhidao.baidu.com/question/191081977.html 问题 第一句(function (window, undefined){主体})(windo...
  • ArvinStudy
  • ArvinStudy
  • 2013年06月26日 14:43
  • 678

JS 关于(function(w) {...})(window)写法的理解——立即执行函数

1.前半部分(function(){ }) (function(){ }):函数的定义 表示一个匿名函数。 function(arg){...}定义了一个参数为arg的匿名函数。所以(functio...
  • sophiafei_2000
  • sophiafei_2000
  • 2017年09月15日 14:55
  • 464

jQuery 1.4.4 中 function( window, undefined ) 写法原因(function( window, undefined ) {})(window);

最常见的闭包 (Closure) 范式大家都很熟悉了: 123 (function() {// ...})(); 很简单,大家都在用。但是,我们需要了解更多。 首先,闭...
  • gameWYD
  • gameWYD
  • 2011年12月07日 13:58
  • 3585
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:关于(function( window, undefined ) {})(window)写法的理解
举报原因:
原因补充:

(最多只允许输入30个字)