Javascript:undefined作为函数参数

时间:2015-10-28 05:37:26

标签: javascript parameters undefined

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

var Subject = ( function( window, undefined ) {

undefined作为函数参数是什么?

4 个答案:

答案 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

JSfiddle

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