我刚刚发现YUICompressor(2.4.7)不会合并变量声明。例如,
var x = 1;
var y = 2;
压缩为
var a=1;var b=2;
我认为,可以合理地期望一个压缩工具能够结合连续的var声明,就像这样:
var a=1,b=2;
我的真正问题是,是否合理并且可能(对于一个缩小器)自动安全地将单个函数中的非连续var声明组合起来?
我刚刚发现YUICompressor(2.4.7)不会合并变量声明。例如,
var x = 1;
var y = 2;
压缩为
var a=1;var b=2;
我认为,可以合理地期望一个压缩工具能够结合连续的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
})();
(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声明。
因此,如果压缩程序总是这样做,那么你的代码更有可能遇到这种问题
var
,然后连接数组。单个var
语句仍然导致问题,最终的解决方案是将数组声明拆分为单独的var
语句,然后连接数组。 - Ruan Mendes