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

有的時候,咱們會在JS框架中看到這行

(function(window, undefined) {})(window) ,它是作什麼用的,咱們來分析下它

首先這就是一個匿名函數,當即執行它javascript

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

 

爲這麼要這樣寫,有什麼做用

對js進行壓縮的時候java

都可以替換成其餘簡寫字符,從而減小文件大小,由於他們被視爲局部變量使用。jquery

(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)^this

再來一個spa

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

window.undefined和undefined·爲何要變成了undefined了呢?<-_<-code

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

相關文章
相關標籤/搜索