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

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. })(window);
  11. //方式三
  12. (function(undefined ) {
  13. var tmp = window;
  14. tmp.property1 = ……;
  15. tmp.property2 = ……;
  16. ……
  17. })();

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

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

规避用户对undefined进行定义,致使函数发生异常

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

如果用户

var undefined =xiaoyan;

(function ($, undefined){ })(jQuery) //这里就可以传个undefined的形参,避免上面的定义,只要没传值进去,undefined就不会被赋值

时间: 2024-08-10 19:52:34

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

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

JS 关于(function( window, undefined ) {})(window)写法的理解 [网络整理] (function( window, undefined ) {})(window); 这个,为什么要将window和undefined作为参数传给它? (function( $, undefined ) {})(jQuery); 同理 因为 ecmascript 执行JS代码是从里到外,因此把全局变量window或jQuery对象传进来,就避免了到外层去寻找,提高效率.und

jquery源码中的(function(window, undefined){})(window)【转】

(function( window, undefined ) {})(window);这个,为什么要将window和undefined作为参数传给它? (function( $, undefined ) {})(jQuery); 同理 因为 ecmascript 执行JS代码是从里到外,因此把全局变量window或jQuery对象传进来,就避免了到外层去寻找,提高效率.undefined在老一辈的浏览器是不被支持的,直接使用会报错,js框架要考虑到兼容性,因此增加一个形参undefined. 还

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

有的时候,我们会在JS框架中看到这行 (function(window, undefined) {})(window) ,它是做什么用的,我们来分析下它 首先这就是一个匿名函数,立即执行它 (function(window, undefined) { // coding })(window) 为这么要这样写,有什么作用 对js进行压缩的时候 均可以替换成其他简写字符,从而减少文件大小,因为他们被视为局部变量使用. (function(w, u) { // coding })(w) window:

window.undefined=window.undefined

在jquery中我们见到window.undefined=window.undefined的写法,今日又在ext中见到window["undefined"]=window["undefined"],对其写法非常不理解,将自身赋给自身有什么意义,在网上狂搜一番也没有明确的解释,后来看到ext注释写了这么一句:for old browsers,很明显是为了兼容老的浏览器,思虑半天,似乎有了些理解.   在较老的浏览器中,如IE5之前的浏览器,undefined并不是wi

对IIFE中(function(window,undefined){})(window)中为什么传递undefined的理解

1.在函数中定义形参但没有传递实参就相当于定义了变量但未赋值,所以下面中的a就是undefined 1 function test(a){ 2 console.log(a)//undefined 3 }; 4 test(); 2.在IIFE中,window作为实参传递进去,避免了执行代码时,每次都到全局中寻找window从而提高了效率,但是为什么形参中还要指定一个undefined呢,上面说过在函数中定义了形参就相当于定义了但不赋值,那在这个立即执行函数中undefinde还是undefined

js中(function(){…})()立即执行函数写法理解

javascript和其他编程语言相比比较随意,所以javascript代码中充满各种奇葩的写法,有时雾里看花,当然,能理解各型各色的写法也是对javascript语言特性更进一步的深入理解. ( function(){…} )()和( function (){…} () )是两种javascript立即执行函数的常见写法,最初我以为是一个括号包裹匿名函数,再在后面加个括号调用函数,最后达到函数定义后立即执行的目的,后来发现加括号的原因并非如此.要理解立即执行函数,需要先理解一些函数的基本概念.

IIFE-js中(function(){…})()立即执行函数写法理解

介绍IIFE IIFE的性能 使用IIFE的好处 IIFE最佳实践 jQuery优化 在Bootstrap源码(具体请看<Bootstrap源码解析>)和其他jQuery插件经常看到如下的写法: Js代码   +function ($) { }(window.jQuery); 这种写法称为: IIFE (Imdiately Invoked Function Expression 立即执行的函数表达式). 一步步来分析这段代码. 先弄清函数表达式(function expression)和 函数

关于jquery源码中undefined作为参数的理解

大家先看一下,下面代码 (function (window,undefined) {window.alert('zhangling');var person = {};person.addName = function () { };person.addAge = function () { };})(window) 压缩后: (function(a,b){a.alert('zhangling');var c={};c.addName=function(){};c.addAge=function

关于jQuery源码中(function(window,undefined){//dosomething()})(window)写法解释

一.首先是最常见的闭包 (Closure) 范式自执行函数的写法,这里用匿名函数封装(构造块级作用域),避免了匿名函数内部的代码与外部之间发生冲突(如使用了相同的变量名). 1 (function() {// ...})(); 二.自执行函数和其他函数类似,都可以传入参数:jQuery源码中将window作为一个参数传入, window是DOM对象模型的最顶层对象,把全局变量传进来,就避免了到外层去寻找,提高效率: 1 (function(window) {// ...})(window); 当