Javascript:未定义为函数参数
Javascript: undefined as a function parameter
在这个页面上,它显示了一些示例代码,包含以下行:
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
因此,唯一的保证是方法调用程序能够控制上下文。
相关文章:
- 函数参数中的数据与指定变量之间的任何性能差异
- AngularJS:我可以跳过函数参数回调吗
- 为什么不'我们在javascript中使用函数参数的数据类型
- 使用闭包共享构造函数参数
- 函数参数的值错误
- 当一个重要的构造函数参数丢失时应该发生什么
- 阻止ReSharper将JavaScript函数参数放到新行中
- 根据函数参数将CSS值存储在var中,然后对其进行操作
- 使构造函数参数具有ES6类方法的特权
- 当客户端将两个按钮的javascript函数参数修改为相同时,SQL/PHP会更新多行
- Windows.Networking.EndpointPair构造函数参数
- 是否可以使用Sinon.JS检查函数参数绑定是否正确
- 大括号中的Javascript函数参数
- jQuery 无法使用 AJAX 调用访问函数内部的函数参数
- 将JSON字符串转换为函数参数
- eval()读取函数参数有多糟糕
- Javascript不能在一个命令中使用函数参数
- 函数参数在内部不可见,返回新的Promise(函数(resolve,reject).传递给被promise化的函数的
- ES6类构造函数参数
- 是否可以在javascript函数参数列表中调用多个函数