谷歌闭包编译器,某些属性永远不会被重命名

Google Closure Compiler, some properties will never be renamed?

本文关键字:永远 重命名 属性 闭包 编译器 谷歌      更新时间:2023-11-01

今天我发现了一个与Google闭包编译器重命名属性有关的问题。如果有人能解释我为什么这个代码,我会很高兴:

// ==ClosureCompiler==
// @compilation_level ADVANCED_OPTIMIZATIONS
// @output_file_name default.js
// ==/ClosureCompiler==
// ADD YOUR CODE HERE

console.info({
  foo: 'bar',
  index: 10,
  bla: 'x'
});

始终编译为:

console.info({b:"bar",index:10,a:"x"});

属性"index"永远不会重命名为其他名称。问题是为什么?如何强制重命名?

通常,闭包编译器可以根据类型进行重命名。然而,面对松散的类型,它确实会后退。没有直接分配给原型属性的对象文字是松散类型之一。在这里,它不会被重命名,因为标准外部中存在"index"属性。有几个定义,但这里有一个:

https://github.com/google/closure-compiler/blob/641cf61b99280b8bb4b62ecce873e51208501fec/externs/es3.js#L718

只是没有时间理解这个"非常聪明的逻辑",我只是将这个属性重命名为其他对象不使用的其他属性。