2017-09-18 3 views
-1

Ich habe eine Funktion auf window.onload Ereignis festgelegt. Innerhalb dieser Funktion habe ich eine für Schleife, die Variable Einheit bei jeder Iteration als ein neues Objekt vom Typ GAME.Unit definiert. Als Ergebnis davon habe ich eine Variable Einheit in Fenster Bereich, hält zuletzt erstellt Objekt! Ich dachte immer, Variablen innerhalb der Schleife sind loop-orientiert. Ich habe überprüft, und es gibt keine anderen Erklärungen auf Einheit Variable irgendwo in meinem Code. Was mache ich falsch?Variable, definierte insde für die Schleife der window.onload Funktion, erhält globalen Gültigkeitsbereich auf Fensterebene

enter image description here

+1

Ihre 'console.log()' Anweisung ist ** innerhalb der Funktion **! Sie suchen nicht im globalen Geltungsbereich! – Quentin

+0

Natürlich ist es innerhalb der Funktion, aber es ist nicht innerhalb der Schleife, wo Variable erstellt. Wenn ich es anderswo in meinen Code lege, Variable immer noch da. – DesiredName

+0

Die 'var'-Anweisung deklariert eine Variable, deren Abschlussbereich festgelegt ist. (Das bedeutet, dass die Variable im gesamten Funktionskörper zugänglich ist.) Wenn Sie möchten, dass die Variable nur in der Schleife zugänglich ist, müssen Sie 'let' oder' const' verwenden. Auch Ihre 'console.log' ist innerhalb der Funktion, so dass es nicht wirklich im Fensterbereich ist. – Razem

Antwort

0

Variablendeklarationen, wo immer sie auftreten, verarbeitet werden, bevor ein Code ausgeführt wird. Der Gültigkeitsbereich einer mit var deklarierten Variablen ist der aktuelle Ausführungskontext, der entweder die umschließende Funktion oder für Variablen, die außerhalb einer Funktion deklariert sind, global ist.

- MDN.

var Scopes eine Variable auf die Funktion, nicht die Schleife.

Um eine Variable auf einen Block zu beschränken, verwenden Sie let.

Verwandte Themen