Javascript: 未定义为函数参数

Javascript: undefined as a function parameter

在这个 page 上,它显示了一些示例代码,其中包含以下行:

var Subject = ( function( window, undefined ) {

作为函数参数的undefined是什么?

这用于防止在非严格模式下覆盖 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

这样做是为了确保 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 ) {

他们传入 window 并使用它,但是他们没有将第二个值传递给 undefined 参数,因此 undefined 将是 undefined。

因为您曾经可以重新定义 undefined 的值,但现在不行了。 Undefined 是一种具有多种用例的特殊类型。如果它被重新定义为 true,像这样的代码将会中断:

if(my_var === undefined) { 
     dont_load_missiles());
} else {
     load_missiles();
}

我最近问了一个类似的问题 (),社区推荐了这篇文章。

所选答案中的以下陈述()从理论上回答了问题;

  • This is used to prevent from overriding the value of undefined in non-strict mode.
  • In non-strict mode, the value of undefined can be override by assigning other value to it.

我相信一个实际的例子可能会有帮助

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

JSfiddle

因此,唯一的保证是方法调用者控制上下文。