为什么谷歌闭包编译不会在变量中保留重用索引?

时间:2018-05-21 20:40:33

标签: javascript google-closure-compiler

This MWE显示了Google封闭编译器如何与较长的obj[keyA]交换短obj["some-very-long-key"]

输入javascript:

var foo = new function() {
  var keyA = 'some-very-long-key';
  var keyB = 'another-key';
  this.bar = function() {
    obj[keyA] = {};
  }
  this.baz = function(data) {
    obj[keyA][keyB] = data;
  }
}();

Google闭包编译器输出:

var foo = new function() {
  this.bar = function() {
    obj["some-very-long-key"] = {};
  };
  this.baz = function(a) {
    obj["some-very-long-key"]["another-key"] = a;
  };
};

如果我删除了包装功能,it works as I expected it to

输入javascript:

var keyA = 'some-very-long-key';
var keyB = 'another-key';
function bar() {
  obj[keyA] = {};
}
function baz(data) {
  obj[keyA][keyB] = data;
}

Google闭包编译器输出:

var keyA = "some-very-long-key", keyB = "another-key";
function bar() {
  obj[keyA] = {};
}
function baz(a) {
  obj[keyA][keyB] = a;
}
;

因为我在项目中经常使用长键,所以代码变得比实际大,如果谷歌闭包编译器将字符串文字保留在变量中。

  • 导致此行为的原因是什么?
  • 如何将字符串文字存储在变量中并使用该变量(名称较短)作为索引,同时将整个内容保留在构造函数中?

更新1:我知道我想要的结果可能表现得更差,但我宁愿选择更短的代码。

1 个答案:

答案 0 :(得分:2)

由于gzip - 它通常使压缩的大小更小。它甚至是in the FAQ