const dentro de los ámbitos de bloque en Node y Chrome (V8)
Estoy escribiendo una aplicación nodejs (v4.2.4) donde encontré algún comportamiento extraño.
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);
Mi intuición, proveniente de Java (y la de FireFox), es que la salida debería haber sido
0
1
2
99
Sin embargo, Node (y Chrome) me dan
0
0
0
99
Investigué y entendí desdeMSN - alcance del bloque esevar
no tiene alcance de bloque en javascript. Mirando más alláMSN - const describe una declaración constante con un alcance de bloque:
Las constantes tienen un alcance de bloque, al igual que las variables definidas utilizando la instrucción let. El valor de una constante no puede cambiar mediante la reasignación, y no se puede volver a declarar.
En ese caso, diría que Node y Chrome (en ese caso probablemente V8), tienen algún tipo de manejo sospechoso deconst
en ámbitos de bloque. Pero también escriben que
Esta declaración crea una constante que puede ser global o local para la función en la que se declara.
¿Eso significa que V8 pone cadaconst
declaración como una variable global mientras Firefox crea una local? ¿Cómo puede ser que algo crucial como ese se implemente de manera tan diferente?