/ / Warum ist eine Funktionsdeklaration keine Anweisung, während eine Variablendeklaration - Javascript ist

Warum ist eine Funktionsdeklaration keine Anweisung, während eine Variablendeklaration - Javascript ist

Es scheint eine dumme Frage zu sein, aber ich wirklichIch kann mich nicht wundern, als ich darüber nachdachte, warum hinter der Variablendeklaration ein Semikolon steht, nicht aber eine Funktionsdeklaration. Bedeutet das, dass eine Funktionsdeklaration ein Ausdruck ist?

Und was ist die offizielle Bedeutung für eine Aussage? Ich habe die Antwort gefunden, die besagt, dass eine Anweisung ein "Befehl" ist, der dem Computer mitteilt, was er tun soll. Hat es etwas damit zu tun, wenn es geladen wird, wenn der Code ausgeführt wird?

Antworten:

1 für die Antwort № 1

Ich fing an, mich zu fragen, als ich darüber nachdachte, warum hinter der Variablendeklaration ein Semikolon steht, aber keine Funktionsdeklaration

Nicht jede Anweisung endet mit einem Semikolon.

Beispiele für Anweisungen mit nachgestelltem Semikolon:

  • Variable Aussage: var foo = <expression>;
  • Ausdruck Anweisung: <expression>;
  • Während der Schleife: do <statement> while (<expression>);

Beispiele ohne nachgestellte Semikolons:

  • Wenn Aussage: if (<expression>) <statement>
  • Versuchen Sie die catch-Anweisung: try <block> catch (<identifier>) <block>
  • Für Schleife: for (...) <statement>
  • Blockanweisung: { <statement list> }

Bedeutet das, dass eine Funktionsdeklaration ein Ausdruck ist?

Nein, es ist komplizierter als das. Funktionsdeklarationen sind nicht Aussagen. Sie sind auch keine Ausdrücke Quellelemente. Anweisungen und Funktionsdeklarationen sind beide Quellelemente. **


Und was ist die offizielle Bedeutung für eine Aussage?

Ich kann Ihnen die offizielle Definition nicht sagen, aber inIm Zusammenhang mit JS würde ich sagen, dass es sich um eine Anweisung handelt, die kein zuweisbares Ergebnis / Wert erzeugt. Ausdrücke hingegen erzeugen ein Ergebnis, das in anderen Ausdrücken verwendet werden kann.


** Gut zu wissen, aber etwas abseits: Da Funktionsdeklarationen keine Anweisungen sind, dürfen sie technisch nicht innerhalb von Blöcken verwendet werden. Dies wird noch deutlicher, wenn wir auch berücksichtigen Heben. In diesem Beispiel sollte in jedem Browser ein Syntaxfehler ausgegeben werden. Dies ist jedoch leider nicht der Fall.

if (true) {
function foo() { alert("foo"); }
} else {
function foo() { alert("bar"); }
}
foo();

Dies führt zu unterschiedlichen Verhaltensweisen in verschiedenen Browsern. Während Chrome angezeigt wird barWird Firefox zeigen foo. Chrome zieht nur beide Funktionsdeklarationen hoch, und die zweite überschreibt die erste. Firefox interpretiert beide Deklarationen als etwas Funktionsausdruck.

Versuch es selber in verschiedenen Browsern.


2 für die Antwort № 2

Eine Variablendeklaration kann Nebenwirkungen haben (z. B. var x = alert(42);).

Eine Funktionsdeklaration kann nicht.