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

有的时候,我们会在JS框架中看到这行

(function(window, undefined) {})(window) ,它是做什么用的,我们来分析下它

首先这就是一个匿名函数,立即执行它

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

为这么要这样写,有什么作用

对js进行压缩的时候

均可以替换成其他简写字符,从而减少文件大小,因为他们被视为局部变量使用。

(function(w, u) {
    // coding
})(w)

window: 表示 BOM 浏览器对象模型中的 window 对象

undefined:对于undefined,因为他不是javascript关键字,容易遭到污染。

举个例子

function foo() {
     var undefined = 10;
     alert(undefined);
}
foo(); // 打印10

再举个例子:

 var undefined = 10;
    function foo() {
       alert(undefined);
    }
 foo(); // undefined

为什么又变成undefined了呢 ^(0_0)^

再来一个

 var undefined = 10;
    function foo() {
       alert(window.undefined);
       alert(undefined);
    }
 foo(); // undefined

window.undefined和undefined·为什么要变成了undefined了呢?<-_<-

undefined是window的一个属性,是不可写的,所以你在全局作用域改变window这个属性,根本写不进.

var fun = function (){
    var undefined = 2;
    console.log(undefined); //2
}
var undefined = 1;console.log(undefined);  //undefined
fun(); 

这样就能看的比较直观的了解undefined了

当然从随着浏览器的不断升级,浏览器API不断改变从 jquery2.0.3 2013-07-03 13:30 这一版之后,可以发现不再使用

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

经过3个测试beta版

逐渐改成了

(function( global, factory ) {

}(this,function(window){}));

这边(this,function(window){})

但有可能导致一个问题,通过this,window可能没有被定义

所以让typeof 一下window。

(typeof window !== "undefined" ? window : this, function( window, noGlobal );

 

原文地址:https://www.cnblogs.com/youku/p/9390078.html

时间: 2024-09-30 15:48:49

分析(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. 还

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

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

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

;(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 ) {

bootstrap源码分析之下拉菜单 (+function ($) { &quot;use strict&quot;;}(window.jQuery);全面分析)

<div class="dropdown"> <a id="dLabel" data-target="#" href="http://example.com" data-toggle="dropdown" role="button" aria-haspopup="true" aria-expanded="false"> Dr

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

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

JS (function (window, document, undefined) {})(window, document)的真正含义

原文地址:What (function (window, document, undefined) {})(window, document); really means 按原文翻译 在这篇文章中,我们将探讨标题所暗示的内容,并解释自调用函数设置给我们带来了什么. 有趣的是,我被问到关于IIFE(即时调用的函数表达式)的很多,它采用以下设置: (function (window, document, undefined) { // })(window, document); 那么为什么不写一篇关