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
因此,唯一的保证是方法调用者控制上下文。
在这个 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
因此,唯一的保证是方法调用者控制上下文。