可能重复:
How does this JavaScript/JQuery Syntax work: (function( window, undefined ) { })(window)?
我在jquery source code (line 13)中看到了这种模式,他们将'window'和'undefined'重新绑定到本地人:
(function(window, undefined) {
window.something = 42;
var dummy = 42 === undefined;
}(window));
我认为将“窗口”重新绑定到本地是一种严格的模式(防止意外访问窗口) - 但是看看它们如何将undefined
绑定到本地。为什么呢?
答案 0 :(得分:2)
在JavaScript中,您可以为undefined分配值,例如:
undefined=42;
jQuery表示法确保块中的undefined确实未定义。
从JavaScript 1.8.5开始,根据ECMAScript 5规范,undefined是不可写的。
答案 1 :(得分:1)
如果有人改变undefined
您的代码行为将无法预测:
undefined = 42;
所以你通过在调用期间不传递该参数来强制函数中的undefined
始终是正确的:
function safe(undefined) {
// undefined is really undefined here
}
function unsafe() {
// undefined could be 42 here
}
undefined = 42;
safe();
unsafe();
与window
类似。同时传递window
会给你额外的优势,你可以测试你的功能而不会真正影响真实的窗口。即你的“模拟”窗口可以有自定义setTimeout
来测试函数的计时行为。
function complex(window)
{
window.setTimeout(callback, 1000);
}
var mockWindow = {setTimeout:...};
complex(mockWindow);
// here you can make sure setTimout was called and if necessary
// call the callback.