我正在对jQuery插件进行逆向工程,发现了一个特殊的函数定义。
function myFunction(value, undefined){
...
}
当然,这有效,但类似的声明,如
function myFunction(value, null) {
...
}
或
function myFunction(value, 5) {
...
}
不工作。
undefined
参数的初始声明的工作方式类似于默认参数值(请参阅下面的代码片段(。有人可以在 ECMA6 规范中指出这种现象吗?我甚至知道要搜索什么。
function strange (value, undefined) {
document.getElementById("output").innerHTML += "<br/>" + "- " + arguments[1];
}
strange(5,6);
strange(5);
<div id="output"></div>
奇怪的是,undefined
不是保留关键字,其全局值可以被覆盖(或者可能在过去,在某些运行时环境中(。因此,这个技巧提供了一种包装期望undefined
真正undefined
的代码的方法:当调用该函数时,如果只传递一个参数,则称为"undefined"的第二个参数将在函数内具有真实的undefined
值。
为什么undefined
会被覆盖?谁知道呢。为还必须托管第 3 方代码(通常是广告和类似的东西(的页面编写代码的人在一段时间后变得偏执和防御。