const in Blockbereichen in Node und Chrome (V8)
Ich schreibe eine nodejs (v4.2.4) App, bei der ich auf merkwürdiges Verhalten gestoßen bin.
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);
Meine Intuition, die von Java (und der von FireFox) kommt, ist, dass die Ausgabe @ hätte sein soll
0
1
2
99
Allerdings, Node (und Chrome) gib mir
0
0
0
99
Ich habe nachgeforscht und verstanden vonMSN - Gültigkeitsbereich blockieren Dasvar
hat keinen Blockbereich in Javascript. Weiter suchen,MSN - const beschreibt eine const-Deklaration als Blockbereich:
Konstanten sind blockspezifisch, ähnlich wie Variablen, die mit der let-Anweisung definiert wurden. Der Wert einer Konstanten kann sich durch Neuzuweisung nicht ändern und kann nicht neu deklariert werden.
In diesem Fall würde ich sagen, dass Node und Chrome (in diesem Fall wahrscheinlich V8) eine Art zwielichtigen Umgang mit @ habeconst
in Blockbereichen. Aber sie schreiben auch, dass
Diese Deklaration erstellt eine Konstante, die für die Funktion, in der sie deklariert ist, entweder global oder lokal sein kann.
Bedeutet das, dass V8 alleconst
-Deklaration als globale Variable, während FireFox eine lokale Variable erstellt? Wie kann es sein, dass so etwas Entscheidendes so unterschiedlich umgesetzt wird?