Schauen Sie sich den folgenden Code an:
Die Codekopie lautet wie folgt:
if (! ("aa" im Fenster)) {
Alarm ('Oh mein Gott');
var aa = 1;
}
alarm ("aa" im Fenster);
Alarm (AA);
Beantworten Sie die folgenden Fragen:
Wird ein Fehler gemeldet? Wie oft wird es auftauchen?
Ist die zweite Alarmbereitschaft wahr oder falsch?
Was taucht im dritten Alarm auf?
Warum?
Denken Sie darüber nach und testen Sie es. Wenn Sie richtig antworten, müssen Sie die folgenden Artikel nicht lesen.
-----------------------------
Das Definieren von Variablen in JS ist zu einfach. Sie können einfach einen VAR oder auch ohne VAR verwenden:
Die Codekopie lautet wie folgt:
var a = 1;
Hier ist A der variable Name und 1 der variable Wert. Leider ist das zu einfach. Schauen Sie sich den folgenden Code an:
Die Codekopie lautet wie folgt:
var a;
Alarm (a);
Im Firebug -Test wird undefined auftauchen. Dies ist eine sehr vertraute Zeichenfolge, die darauf hinweist, dass die Variable undefiniert ist. Aber ich denke, ich habe es bereits abgelehnt, dies ist die Definition, aber es ist kein Wert beigefügt.
Lass uns etwas tun, das wirklich undefiniert ist:
Die Codekopie lautet wie folgt:
Alarm (a);
Das ist richtig, benachrichtigen Sie nur eine Variable, die noch nie aufgetreten ist. Was wird passieren?
Firebug meldete direkt einen Fehler: A ist nicht definiert. Es bedeutet, dass A nicht definiert ist. Das Kombination des vorherigen Codes ist verwirrend. Was ist der Unterschied zwischen diesem undefinierten und dem vorherigen Undefinierten?
Tatsächlich entspricht der vorherige Code dem:
Die Codekopie lautet wie folgt:
var a = undefiniert;
Alarm (a);
Mit anderen Worten, wenn eine Variable ohne Zuweisung eines Wertes deklariert wird, übergibt JS einen undefinierten Wert an die Variable. Beachten Sie, dass dies ein "Wert" ist, was bedeutet, dass ein bereits einen Wert hat und dieser Wert als "undefiniert" bezeichnet wird.
Die Variablen hinter dem direkten Alarm sind nie erschienen, was bedeutet, dass dies der wahre undefinierte ist.
Einfach ausgedrückt: Es gibt keine Variable ohne Wert in JS, und der Wert wird zugewiesen, wenn die Variable deklariert wird.
Dann sehen wir uns den folgenden Code an:
Die Codekopie lautet wie folgt:
Alarm (a);
var a = 1;
Wird dieser Code einen Fehler melden? Denn wenn die Alarmwarnung ist, ist die Variable A noch nicht erschienen.
Auf diese Weise gibt es keinen Fehler, aber ein undefinierter Wert taucht auf. Es zeigt an, dass die Variable A bereits existiert, aber der Wert ist nicht das, was wir wollen, sondern undefiniert. Was ist das Problem?
Da die Deklaration der Var -Variablen mit der Funktionserklärung übereinstimmt, wird der obige Code tatsächlich so aussieht:
Die Codekopie lautet wie folgt:
var a;
Alarm (a);
a = 1;
Auf diese Weise werden Sie verstehen.
Daher ist der Schlüssel zu diesem Problem: Die VAR -Deklaration erreicht im Voraus die Oberseite des Geltungsbereichs, aber der beigefügte Wert wird nicht sein - eine sehr verworrene Einstellung, ich weiß nicht, warum ich das getan habe. Ich persönlich denke, dass dies ein Fehler von JS ist.
Es gibt jetzt eine Codegewohnheit, dass Befürworter variabler Erklärungen vor dem Zielfernrohr stellen, wahrscheinlich in Anbetracht dessen - auch wenn Sie sie nicht vor dem Voraus schreiben, wird JS im Voraus fortgesetzt.
Lassen Sie mich nun die Antwort auf die Frage zu Beginn des Artikels veröffentlichen:
Nur zwei Warnungen werden auftauchen, und die Warnung, wenn nicht ausgeführt wird, da die VAR -Deklaration fortgeschritten ist, sieht der eigentliche Code so aus:
Die Codekopie lautet wie folgt:
var aa;
if (! ("aa" im Fenster)) {
Alarm ('Oh mein Gott');
aa = 1;
}
alarm ("aa" im Fenster);
Alarm (AA);
Obwohl AA leer ist, wird es wahr sein, wenn er im Fenster "AA" beurteilt wird, da A existiert und der Wert undefiniert ist. Also, wenn Code nicht ausgeführt wird. Ich werde nicht über die letzten beiden Warnungen sprechen.
Persönlich bin ich der Meinung, dass dies eine sehr unsinnige Frage ist. Wir sollten seine Gründe verstehen, aber ihn als Falle verachten.
Die obige Frage ist auch der Grund, warum ich diesen Artikel geschrieben habe. Ich habe diesen Code aus einem Online -Artikel gesehen, aber es gibt keine Antwort darin. Ich konnte meine Schwester nicht verprügeln, also ging ich zum Stackoverflow und bat darum, es herauszufinden. Die Antwort ist dieser Artikel.
Aber das ist eigentlich eine sehr grundlegende Frage! ! !
Haha, vergib mir, es gibt eine andere Frage:
Die Codekopie lautet wie folgt:
var b = {}
Alarm (B.AA);
Alert (B.Aa.BB);
Dies ist auch ein Weg, um Variablen zu deklarieren. Wird dieser Code einen Fehler melden? Warum?