3

我刚刚发现 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 声明是否合理?

4

2 回答 2

2

这取决于。如果您正在谈论带有初始化的声明,那么:不。

考虑一下:

(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属性,因此不会被压缩器所期望。

于 2012-03-19T19:04:46.453 回答
1

我知道一个不希望这样做的例子。看到这个问题我是否达到了浏览器中 JavaScript 可以处理的对象大小的限制?

当变量的初始化发生在单个var语句中时,该问题是关于错误的。问题是关于将一​​个非常巨大的文字分配给一个失败的变量。最后的解决方案是将对象拆分为单独的 var 声明。

因此,如果压缩器总是这样做,那将导致您的代码更有可能遇到这种问题

于 2012-03-19T18:17:51.433 回答