Javascript:未定义为函数参数

Javascript: undefined as a function parameter

本文关键字:函数 参数 未定义 Javascript      更新时间:2023-09-26

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

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

这样做是为了确保未定义总是未定义的。在JavaScript中,由于undefined不是一个保留字,而是一个正则变量,因此这是允许的,例如:

 undefined = 2; // Assign a different value to undefined
 if (undefined == 2)  // Now this statement would be true

所以在你的情况下

var Subject = ( function( window, undefined ) {

他们传入窗口并使用它,但不会将第二个值传递给未定义的参数,因此未定义的将是未定义的。

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

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

我最近问了一个类似的问题(SO链接),社区提出了这篇文章。

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

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

JSfiddle

因此,唯一的保证是方法调用程序能够控制上下文。