我认为undefined
(或window.undefined
)是一个常量变量,而不是保留字(如NaN
,Infinity
,与null
不同)。
当使用UglifyJS压缩频繁使用undefined
的Javascript文件时,最好声明一个局部变量来保存undefined
。
例如:
function main() {
var undefined;
...
}
UglifyJS会给我:
function main(){var n;...}
修改
谢谢@ T.J。克劳德!现在我有自己的选择。我确信undefined
,NaN
,Infinity
和window
不是保留字,只是“只读”。因此,声明本地undefined
(即使是严格模式)也没有问题。我也不担心存在混淆问题,我只需要写一个// comment
或/* comment */
来解释这意味着什么。
答案 0 :(得分:2)
它是否“好”是一个意见问题,所以让我们把它放在一边。
肯定:
undefined
变为n
或类似。否定:
没有技术没有这样做的原因(可维护性除外)。在您的方案中,变量将具有真值undefined
。事实上,编写通用库是很常见的:
(function(undefined) {
// ...
})();
......这只是你提议的一个变种。为什么作者这样做?如果某些eejit在他们的代码之外做了这个:
undefined = 42;
上面的模式确保了作用域函数中的undefined
标识符确实具有值undefined
(因为我们在调用作用域函数时不传递任何arg)。
这不是认可,只是强调没有技术问题。
你不再看到这种模式了,因为第5版规范(2009)使undefined
全局变量(以及其他几个) readonly 。分配给它停止更改其值。参见Annex E和§15.1.1,它引用了:
15.1.1:全局对象的值属性NaN,Infinity和undefined已更改为只读属性。