javascript - 为什么谷歌闭包编译不在变量中保留重复使用的索引?

标签 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:我知道我想要的结果可能会稍微差一点,但我宁愿使用更短的代码。

最佳答案

因为 gzip - 它通常使压缩后的大小更小。甚至是in the FAQ

关于javascript - 为什么谷歌闭包编译不在变量中保留重复使用的索引?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50456349/

相关文章:

javascript - 使用javascript插入PNG注释 block (iTXt)

javascript - 请解释有关javascript中原型(prototype)属性和函数构造函数的详细信息

javascript - html页面中元素的z-index定位问题

javascript - 告诉闭包编译器不要重命名任何函数

javascript - Google 关闭编译器 : remove dead code by setting CompilerOptions

javascript - 如何控制谷歌地图 Javascript 上的标记位于哪一层?

javascript - 如何使用 JavaScript 从动态存储数据的网站获取跨度值

javascript - 闭包编译器忽略对象突变

javascript - 使用closure-compiler自动编译javascript源代码

javascript - 将 3rd 方库与 requirejs 一起使用