const в пределах блочных областей в Node и Chrome (V8)

Я пишу приложение nodejs (v4.2.4), где я столкнулся со странным поведением.

function A(number) {
 this.number = number;
}

for(var i = 0; i < 3; i++) {
  const a = new A(i);

  console.log(a.number);
}

const b = new A(99);
console.log(b.number);

Моя интуиция, пришедшая из Java (и из FireFox), заключается в том, что результат должен был быть

0
1
2
99

Тем не менее, Node (и Chrome) дают мне

0
0
0
99

Я исследовал и понял изMSN - область действия блока тотvar не имеет блока видимости в JavaScript. Смотря дальше,MSN - const описывает объявление const как имеющее область видимости блока:

Константы имеют блочную область, во многом как переменные, определенные с помощью оператора let. Значение константы не может быть изменено путем переназначения и не может быть повторно объявлено.

В этом случае я бы сказал, что Node и Chrome (в этом случае, вероятно, V8) имеют некоторую теневую обработкуconst в области применения блока. Но они также пишут, что

Это объявление создает константу, которая может быть глобальной или локальной для функции, в которой она объявлена.

Означает ли это, что V8 ставит каждыйconst объявление в качестве глобальной переменной, в то время как FireFox создает локальную переменную? Как может быть, чтобы что-то решающее, подобное этому, было реализовано так по-другому?

Ответы на вопрос(2)

Ваш ответ на вопрос