首先這就是一個匿名函數,當即執行它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 );