La première version:
for (var x in set) {
...
}
déclare une variable locale appelée x
. La deuxième version:
for (x in set) {
...
}
ne fait pas.
Si x
est déjà une variable locale (c'est à dire que vous avez un var x;
ou var x = ...;
quelque part plus tôt dans votre périmètre en cours (c'est à dire la fonction en cours)), puis ils seront équivalents. Si x
n'est pas déjà une variable locale, puis à l'aide de la deuxième implicitement déclarer une variable globale x
. Considérer ce code:
var obj1 = {hey: 10, there: 15};
var obj2 = {heli: 99, copter: 10};
function loop1() {
for (x in obj1) alert(x);
}
function loop2() {
for (x in obj2) {
loop1();
alert(x);
}
}
loop2();
vous pourriez vous attendre à ce à alerter hey
, there
, heli
, hey
, there
, copter
, mais depuis l' x
est un et le même, il vous alerte en hey
, there
, there
, hey
, there
, there
. Vous ne voulez pas que! Utiliser var x
votre for
boucles.
Pour couronner le tout: si l' for
boucle est dans la portée globale (c'est à dire pas une fonction), puis les locaux de la portée (scope x
est déclaré dans si vous utilisez var x
) est la même que la portée globale (le champ x
est implicitement déclarée dans si vous utilisez x
sans var), de sorte que les deux versions seront identiques.