Heim  >  Artikel  >  Web-Frontend  >  Diskussion zum Definieren von Variablen und Variablenprioritätsproblemen in JavaScript_Javascript-Kenntnissen

Diskussion zum Definieren von Variablen und Variablenprioritätsproblemen in JavaScript_Javascript-Kenntnissen

WBOY
WBOYOriginal
2016-05-16 16:34:131218Durchsuche

Sehen Sie sich den folgenden Code an:

Code kopieren Der Code 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 Warnung wahr oder falsch?
Was erscheint in der dritten Warnung?
Warum?
Denken Sie darüber nach und testen Sie es dann. Wenn Sie die Frage richtig beantworten, müssen Sie die folgenden Artikel nicht lesen.

---------

Es ist zu einfach, Variablen in JS zu definieren. Verwenden Sie einfach var oder sogar ohne var:


Code kopieren Der Code lautet wie folgt:
var a = 1;

Hier ist a der Variablenname und 1 der Variablenwert. Leider ist das zu einfach. Schauen Sie sich den folgenden Code an:

Code kopieren Der Code lautet wie folgt:
var a;
alarm(a);

Beim Testen mit Firebug wird undefiniert angezeigt. Dies ist eine Zeichenfolge, mit der jeder vertraut ist. Sie scheint darauf hinzuweisen, dass die Variable undefiniert ist. Aber ich denke, ich habe schon var, das ist die Definition, es hat einfach keinen Mehrwert.
Lass uns etwas wirklich Undefiniertes tun:

Code kopieren Der Code lautet wie folgt:
alarm(a);

Das ist richtig, alarmieren Sie einfach eine Variable, die noch nie aufgetaucht ist. Was wird passieren?

Firebug hat direkt einen Fehler gemeldet: a ist nicht definiert. Dies bedeutet, dass a nicht definiert ist. In Kombination mit dem vorherigen Code ist dies verwirrend. Was ist der Unterschied zwischen diesem Undefinierten und dem vorherigen Undefinierten?

Tatsächlich entspricht der vorherige Code diesem:

Code kopieren Der Code lautet wie folgt:
var a = undefiniert;
alarm(a);

Das heißt, wenn eine Variable deklariert wird, ohne einen Wert zuzuweisen, übergibt JS einen undefinierten Wert an die Variable, was darauf hinweist, dass a bereits einen Wert hat. undefiniert".

In der folgenden direkten Warnung erscheint die Variable nie, was bedeutet, dass diese wirklich undefiniert ist.

Um es einfach auszudrücken: Es gibt in JS keine Variable ohne Wert, der Variablen wird bei der Deklaration ein Wert zugewiesen.

Dann schauen wir uns den folgenden Code an:

Code kopieren Der Code lautet wie folgt:
alarm(a);
var a = 1;

Wird dieser Code einen Fehler melden? Weil Variable a während der Warnung keine Zeit hatte, angezeigt zu werden.

Auf diese Weise wurde jedoch kein Fehler gemeldet, sondern ein undefinierter Wert angezeigt. Es zeigt, dass die Variable a bereits existiert, aber der Wert ist nicht das, was wir wollen, sondern undefiniert. Welches Problem ist das?

Da die Variablendeklaration mit der Variablendeklaration identisch ist, wird sie erweitert. Tatsächlich sieht der obige Code wie folgt aus:

Code kopieren Der Code lautet wie folgt:
var a;
alarm(a);
a = 1;

Auf diese Weise werden Sie es verstehen.

Der Schlüssel zu diesem Problem ist also: Die var-Anweisung wird an die Spitze des Gültigkeitsbereichs vorrücken, der angehängte Wert jedoch nicht – eine sehr verwirrende Einstellung, ich weiß nicht, warum sie auf diese Weise gemacht wird. Persönlich denke ich, dass dies ein Fehler von JS ist.

Heutzutage gibt es eine Codierungsgewohnheit, die dafür plädiert, Variablendeklarationen an den Anfang des Bereichs zu stellen. Dies liegt wahrscheinlich daran – selbst wenn Sie es nicht an den Anfang schreiben, wird JS an den Anfang gestellt Vorauszahlung.

Veröffentlichen Sie nun die Antwort auf die Frage am Anfang des Artikels:

Es werden nur zwei Warnungen angezeigt, und die Warnung im if wird nicht ausgeführt. Aufgrund des Vorabcharakters der var-Deklaration sieht der eigentliche Code so aus:

Code kopieren Der Code 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, ist es wahr, wenn es anhand von „aa“ im Fenster beurteilt wird, da a existiert und der Wert undefiniert ist. Der if-Code wird also nicht ausgeführt. Auf die letzten beiden Warnungen werde ich nicht eingehen.

Ich persönlich halte das für eine sehr unsinnige Frage. Wir sollten seine Gründe verstehen, aber seine Falle verachten.

Die obige Frage ist auch der Grund, warum ich diesen Artikel in einem Online-Artikel geschrieben habe, aber es gibt keine Antwort darauf, also bin ich zu Stackoverflow gegangen, um nachzufragen aus. Die Antwort ist dieser Artikel.

Aber das ist eigentlich eine sehr grundlegende Frage! ! !

Haha, verzeih mir, später kommt noch eine Frage:

Code kopieren Der Code lautet wie folgt:

var b = {}
alarm(b.aa);
alarm(b.aa.bb);

Dies ist auch eine Möglichkeit, Variablen zu deklarieren. Wird dieser Code einen Fehler melden? Warum?
Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn