有的時候,我們會在JS框架中看到這行 (function(window, undefined) {})(window) ,它是做什麼用的,我們來分析下它 首先這就是一個匿名函數,立即執行它 為這麼要這樣寫,有什麼作用 對js進行壓縮的時候 均可以替換成其他簡寫字元,從而減少文件大小,因為他們被視為局 ...
有的時候,我們會在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 );