1. 程式人生 > >分析(function(window, undefined) {})(window)

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

{} alert 框架 比較 con odi js框架 div 屬性

有的時候,我們會在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 );

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