首先这就是一个匿名函数,当即执行它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 );