2017-09-18 3 views
-1

J'ai une fonction définie sur window.onload. À l'intérieur de cette fonction, j'ai un pour la boucle, qui définit la variable unité à chaque itération comme un nouvel objet de type GAME.Unit. À la suite de cela, j'ai une variable unité dans fenêtre portée, tenant dernier objet créé! J'ai toujours pensé que les variables à l'intérieur de la boucle sont orientées en boucle. J'ai revérifié et il n'y a aucune autre déclaration sur unité variable n'importe où dans mon code. Qu'est-ce que je fais mal?Variable, définie insde pour la fonction window.onload, obtient une portée globale au niveau de la fenêtre

enter image description here

+1

Votre instruction 'console.log()' est ** dans la fonction **! Vous ne cherchez pas dans la portée mondiale! – Quentin

+0

Bien sûr, il est à l'intérieur de la fonction, mais ce n'est pas à l'intérieur de la boucle, où variable créé. Si je le mets ailleurs dans mon code, variable encore là. – DesiredName

+0

L'instruction 'var' déclare une variable dont la portée est limitée. (Cela signifie que la variable est accessible dans tout le corps de la fonction.) Si vous voulez que la variable soit accessible uniquement dans la boucle, vous devez utiliser 'let' ou' const'. Votre 'console.log' est également dans la fonction, donc ce n'est pas vraiment dans la fenêtre. – Razem

Répondre

0

déclarations de variables, où qu'elles se produisent, sont traités avant que le code est exécuté. La portée d'une variable déclarée avec var est son contexte d'exécution actuel, soit la fonction englobante ou, pour les variables déclarées en dehors de toute fonction, globale.

- MDN.

var étend une variable à la fonction et non à la boucle. Pour étendre une variable à un bloc, utilisez let.