答案 0 :(得分:6)
这用于防止在非严格模式下覆盖undefined
的值。
在非严格模式下,undefined
的值可以通过为其指定其他值来覆盖。
undefined = true; // Or any other value
因此,使用undefined
的值将无法按预期工作。
在严格模式下,undefined
是只读的,为其赋值会引发错误。
在代码中,不传递最后一个参数的值,因此它将被隐式传递为undefined
。
var Subject = ( function( window, undefined ) {
}(window)); // <-- No parameter is passed for the last value
答案 1 :(得分:3)
这样做是为了确保undefined始终未定义。在JavaScript中,由于undefined不是保留字而是常规变量,因此允许这样做:
undefined = 2; // Assign a different value to undefined
if (undefined == 2) // Now this statement would be true
所以在你的情况下
var Subject = ( function( window, undefined ) {
它们传入窗口并使用它,但是它们不会将第二个值传递给未定义的参数,因此未定义将是未定义的。
答案 2 :(得分:0)
因为您曾经能够重新定义undefined
的值,但现在不再重新定义。 Undefined是一种特殊类型,有几个用例。如果它被重新定义为true
,那么这样的代码就会破坏:
if(my_var === undefined) {
dont_load_missiles());
} else {
load_missiles();
}
答案 3 :(得分:0)
我最近问了类似的问题(SO link),社区提出了这篇文章。
以下所选答案(link)中的以下语句从理论上回答了该问题;
- 这用于防止在非严格模式下覆盖
undefined
的值。- 在非严格模式下,可以通过为其分配其他值来覆盖
undefined
的值。
我相信一个实际的例子可能会有所帮助
var undefined = 7;
function printUndefined(undefined) {
document.getElementById("output").innerHTML += undefined + "<br/>";
}
printUndefined(); // Output is undefined
printUndefined(undefined); // Output is 7
printUndefined(10); // Output is 10
因此,唯一的保证是方法调用者可以控制上下文。