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 создает локальную переменную? Как может быть, чтобы что-то решающее, подобное этому, было реализовано так по-другому?