Quizás no conozco cómo se obtienen las variables de índice de bucle for
, pero me sorprendió mucho cuando uno de mis bucles no se completó, aparentemente porque una función llamada desde dentro de un bucle contenía i
para su índice de bucle for
como bien.Javascript para variables de índice de bucle se vuelven parte del alcance global?
Aquí hay un pequeño script que puse juntos para demostrar este comportamiento:
var loopOne = function(test) {
for(i = 0; i < test.length; i++)
console.log(getMask(test));
};
var getMask = function(pass) {
var s = "";
for (i = 0; i < pass.length; i++) {
s = s + "*";
}
return s;
};
loopOne('hello');
Si funciono esto en Chrome y miro el registro de la consola, que debería ver *****
cinco veces. Sin embargo, solo lo veo una vez. Tras una inspección adicional, si escribo i
en la consola JavaScript de Chrome, obtendrá una salida 6 (= 'hello'.length + 1
). Esto me hace pensar que i
se ha convertido en una parte del alcance global y no se limita al alcance del bucle for
para el que se necesitó.
¿Es esto correcto? Si es así, ¿cuál es una mejor práctica para definir la variable de índice de un bucle for
en javascript?
"Si no se encuentra ninguno, la variable se crea en el ámbito más alto". Eso es simplemente malo. Gracias por la explicación sobre el alcance utilizando 'var'. Ahora que lo mencionas, debería haberlo recordado. –
@Ben De hecho, es una de las muchas trampas de Javascript. AFAIK esto está siendo/fue corregido en la última especificación de ECMAScript. – deceze
Creo que solo si agrega '" use strict "'. – alex