Google Closure Compiler在声明时使用JSC_CONSTANT_REASSIGNED_VALUE_ERROR发出警告

时间:2018-06-01 06:43:23

标签: javascript ecmascript-6 google-closure-compiler

我正在使用Google Closure Compiler来缩小以下代码:

{
  let x = 10,
      y = 20;
  console.log(y);
}

{
  let x = 30,
      y = 40;
  console.log(y);
}

(另请参阅Closure Compiler Web应用程序的this link。)

令我感到不安的是,编译器发出以下警告:

JSC_CONSTANT_REASSIGNED_VALUE_ERROR: constant y assigned a value more than once.
Original definition at Input_0:4 at line 10 character 6
      y = 40;
      ^

这提出了多个问题:

  • 这些let声明的任何内容都无效吗?
  • 声明包含在自己的块中。所以他们应该彼此独立。正确的吗?
  • 为什么会给我这个警告?
  • 为什么警告仅针对y而不针对x
  • 为什么它将y称为“常数”?我从未在此片段的任何地方声明过常量。

这是ES5语法中的输出代码:

var x=10,y=20;console.log(y);var x$0=30;y=40;console.log(y);

实际上,Google Closure Compiler会重用第一个块中的y变量。但是,对于x,它不会这样做。

有什么想法在这里发生了什么?

1 个答案:

答案 0 :(得分:1)

此问题已通过以下方式解决 https://github.com/google/closure-compiler/commit/b3146ab187540c5bdf3b24f8ebf6ddede7fd63c5

在当前版本(或Web服务)中不再可复制。