Javascript for-Schleife index-Variablen-werden Sie Teil des globalen Rahmen?
Vielleicht ich bin mir nicht bewusst, wie for
loop-index-Variablen Gültigkeitsbereich, aber ich war sehr überrascht, als einer meiner loops nicht abgeschlossen, scheinbar, weil eine Funktion aufgerufen, die in einer Schleife enthaltenen ein i
für seine for
loop-index als gut.
Hier ein kleines script, das ich zusammen um dieses Verhalten zu veranschaulichen:
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');
Wenn ich dieses in Chrom und Blick auf die Konsole an, ich sollte sehen *****
fünf mal. Jedoch sehe ich nur einmal. Bei einer weiteren Untersuchung, wenn ich Typ i
im Chrome-javascript-Konsole, wird es die Ausgabe 6 ( = 'hello'.length + 1
). Das macht mich denken, dass i
geworden, ein Teil des globalen Gültigkeitsbereich und ist nicht auf den Umfang begrenzt, der for
Schleife, für die es gebraucht wurde.
Ist das richtig? Falls ja, was ist die bessere Methode für die Bestimmung der index-Variablen von einem for
- Schleife in javascript?
Du musst angemeldet sein, um einen Kommentar abzugeben.
In Javascript Variablen stammen aus dem Bereich mit der
var
Schlüsselwort. Bei der Deklaration von Variablen mitvar
, die variable bezieht sich auf die aktuelle Funktion. Bei der Zuweisung an eine variable ohne die Verwendung dervar
Stichwort, es wird angenommen, dass Sie reden über eine bereits definierte variable in dem gleichen oder einem höheren Bereich. Wenn keiner gefunden wird, wird die variable erstellt, die im höchsten Umfang.Bottom line: deklarieren Sie alle Variablen mit
var
.var
. Jetzt wo du es sagst, sollte ich daran erinnert, dass."use strict"
.Sollten Sie immer deklarieren Sie Ihre Variablen mit
var
:Beim deklarieren Sie Ihre Variablen mit
var
Sie Rahmen der aktuellen Ausführungskontext.Wenn Sie nicht, Sie werden zu Eigenschaften des global-Objekts (
window
im browser).