是“var undefined;”认为好吗?

时间:2015-09-11 13:15:42

标签: javascript undefined uglifyjs

我认为undefined(或window.undefined)是一个常量变量,而不是保留字(如NaNInfinity,与null不同)。 当使用UglifyJS压缩频繁使用undefined的Javascript文件时,最好声明一个局部变量来保存undefined

例如:

function main() {
  var undefined;
  ...
}

UglifyJS会给我:

function main(){var n;...}

修改

谢谢@ T.J。克劳德!现在我有自己的选择。我确信undefinedNaNInfinitywindow不是保留字,只是“只读”。因此,声明本地undefined(即使是严格模式)也没有问题。我也不担心存在混淆问题,我只需要写一个// comment/* comment */来解释这意味着什么。

1 个答案:

答案 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已更改为只读属性。