首页 > 解决方案 > 为什么谷歌闭包编译不将重用索引保留在变量中?

问题描述

这个 MWE展示了 google 闭包编译器如何将 short 换成obj[keyA]long 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;
  }
}();

谷歌闭包编译器输出:

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

如果我删除包装功能,它会按我的预期工作

输入javascript:

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

谷歌闭包编译器输出:

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

因为我在我的项目中经常使用长键,所以如果 google 闭包编译器将字符串文字保留在变量中,代码会变得比它可能的大。


更新 1:我知道我想要的结果可能会稍微差一点,但我宁愿采用更短的代码。

标签: javascriptgoogle-closure-compiler

解决方案


由于 gzip - 它通常使压缩后的大小更小。它甚至在常见问题解答中


推荐阅读