"var undefined;"算好吗?
Is "var undefined;" considered as good?
我认为undefined
(或window.undefined
)是常量变量,不是保留字(像NaN
、Infinity
,不像null
).
使用UglifyJS压缩Javascript文件时,经常使用undefined
,最好声明一个局部变量来保存undefined
.
例如:
function main() {
var undefined;
...
}
UglifyJS 会给我:
function main(){var n;...}
编辑
谢谢@T.J。拥挤!现在我有了自己的选择。我确定 undefined
、NaN
、Infinity
和 window
不是保留字,它们只是 "read-only"。所以,声明一个本地 undefined
没有问题(即使是严格模式)。我也不担心混淆的维护问题,我只需要写一个 // comment
或 /* comment */
来解释那是什么意思。
是否 "good" 是见仁见智的事情,所以让我们把它放在一边。
正面:
- 较小的压缩文件,因为你所有的
undefined
都变成 n
或类似的。
否定:
- 围绕它可能导致的混乱的维护问题。
没有技术不这样做的理由(除了可维护性)。在您的场景中,变量将具有真实值 undefined
。事实上,像这样编写通用库曾经很常见:
(function(undefined) {
// ...
})();
...这只是您提议的变体。为什么作者要那样做?如果某些 eejit 在他们的代码之外这样做:
undefined = 42;
上面的模式确保范围函数中的 undefined
标识符确实具有值 undefined
(因为我们在调用范围函数时不传递任何参数)。
这不是背书,只是强调这样做没有技术问题。
您不再经常看到这种模式,因为第 5 版规范 (2009) 将 undefined
全局变量(以及其他几个)设为 readonly。分配给它停止改变它的价值。请参阅 Annex E 和第 15.1.1 节,它引用了:
15.1.1: The value properties NaN, Infinity, and undefined of the Global Object have been changed to be read-only properties.
我认为undefined
(或window.undefined
)是常量变量,不是保留字(像NaN
、Infinity
,不像null
).
使用UglifyJS压缩Javascript文件时,经常使用undefined
,最好声明一个局部变量来保存undefined
.
例如:
function main() {
var undefined;
...
}
UglifyJS 会给我:
function main(){var n;...}
编辑
谢谢@T.J。拥挤!现在我有了自己的选择。我确定 undefined
、NaN
、Infinity
和 window
不是保留字,它们只是 "read-only"。所以,声明一个本地 undefined
没有问题(即使是严格模式)。我也不担心混淆的维护问题,我只需要写一个 // comment
或 /* comment */
来解释那是什么意思。
是否 "good" 是见仁见智的事情,所以让我们把它放在一边。
正面:
- 较小的压缩文件,因为你所有的
undefined
都变成n
或类似的。
否定:
- 围绕它可能导致的混乱的维护问题。
没有技术不这样做的理由(除了可维护性)。在您的场景中,变量将具有真实值 undefined
。事实上,像这样编写通用库曾经很常见:
(function(undefined) {
// ...
})();
...这只是您提议的变体。为什么作者要那样做?如果某些 eejit 在他们的代码之外这样做:
undefined = 42;
上面的模式确保范围函数中的 undefined
标识符确实具有值 undefined
(因为我们在调用范围函数时不传递任何参数)。
这不是背书,只是强调这样做没有技术问题。
您不再经常看到这种模式,因为第 5 版规范 (2009) 将 undefined
全局变量(以及其他几个)设为 readonly。分配给它停止改变它的价值。请参阅 Annex E 和第 15.1.1 节,它引用了:
15.1.1: The value properties NaN, Infinity, and undefined of the Global Object have been changed to be read-only properties.