我刚刚发现 YUICompressor (2.4.7) 没有结合 var 声明。例如,
var x = 1;
var y = 2;
压缩到
var a=1;var b=2;
我认为期望 minifier 能够组合连续的var 声明是合理的,如下所示:
var a=1,b=2;
但我真正的问题是期望/可能(对于缩小器)在单个函数中自动安全地组合非连续 var 声明是否合理?
我刚刚发现 YUICompressor (2.4.7) 没有结合 var 声明。例如,
var x = 1;
var y = 2;
压缩到
var a=1;var b=2;
我认为期望 minifier 能够组合连续的var 声明是合理的,如下所示:
var a=1,b=2;
但我真正的问题是期望/可能(对于缩小器)在单个函数中自动安全地组合非连续 var 声明是否合理?
这取决于。如果您正在谈论带有初始化的声明,那么:不。
考虑一下:
(function () {
var x = 1;
console.log(y); // undefined
var y = 2;
})();
(function () {
var x = 1, y = 2;
console.log(y); // 2
})();
但是,以下是安全的,应该由 minifiers 完成:
(function () {
var x = 1, y;
console.log(y); // undefined
y = 2;
})();
这当然是可能的;var
压缩器在生成输出之前扫描整个函数以查找包含的语句。这是压缩变量名所必需的。
请注意,有一个可能的棘手变体,它包括扩展参数列表,从而通过完全消除任何var
语句来节省额外的字节:
(function (x,y) {
x = 1;
console.log(y); // undefined
y = 2;
})();
但是,这会改变函数(很少使用)的length
属性,因此不会被压缩器所期望。
我知道一个不希望这样做的例子。看到这个问题我是否达到了浏览器中 JavaScript 可以处理的对象大小的限制?
当变量的初始化发生在单个var
语句中时,该问题是关于错误的。问题是关于将一个非常巨大的文字分配给一个失败的变量。最后的解决方案是将对象拆分为单独的 var 声明。
因此,如果压缩器总是这样做,那将导致您的代码更有可能遇到这种问题