Я использую Google Closure Compiler для минимизации следующего кода:
{
let x = 10,
y = 20;
console.log(y);
}
{
let x = 30,
y = 40;
console.log(y);
}
(см. Также эту ссылку на веб-приложение Closure Compiler.)
Необъяснимо для меня, компилятор выдает следующее предупреждение:
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
, однако.
Есть идеи, что здесь происходит?