/ / Warum ist die Neudeklaration von Variablen kein Fehler in JavaScript? [geschlossen] - Javascript

Warum ist diese erneute Deklaration von Variablen kein Fehler in JavaScript? [geschlossen] - Javascript

function foo(){
var bar = 3
return bar;
var bar = 8
}
alert(foo());  //prints 3

Wenn Sie in C ++ so etwas tun, wird ein Fehler ausgegeben. Was war das Motiv für diese Designentscheidung?

Antworten:

1 für die Antwort № 1

Aufgrund des Funktionsumfangs und der Funktionsweise von JavaScript wird dieser Code im Wesentlichen wie folgt ausgewertet:

function foo() {
var bar;
bar = 3;
return bar;
bar = 8;
}
alert(foo());

Alle Variablendeklarationen werden bis zum gehisstWenn sie analysiert werden und dann die Zuweisungen zur Laufzeit erfolgen, spielt es im Wesentlichen keine Rolle, ob Sie die Variable mehrmals deklarieren - die Laufzeitumgebung weiß es nicht.


-2 für die Antwort № 2

Grundsätzlich wird jedes Programm vom Computer in drei Schritten abgearbeitet:

  1. Parsing, bei dem die Quelle gelesen und in ein AST konvertiert wird. Ist dies nicht möglich, erhalten Sie einen Syntaxfehler.

  2. Kompilieren, Konvertieren eines AST in eine ausführbare Darstellung (Maschinencode, Bytecode usw.). Bei einem Fehler erhalten Sie einen Kompilierungsfehler.

  3. Laufen, möglicherweise einige Laufzeitfehler.

"Statische" Sprachen wie C ++ oder Java wurden entwickelt, um in Schritt 2 so viele Fehler wie möglich auszulösen. Programmierer lieben das: Jeder festgelegte Compilerfehler bedeutet weniger späteres Debuggen.

"Scripting" -Sprachen wie Javascript normalerweiseKeine Fehler während der Kompilierung auslösen. Jeder Fehler, den Sie erhalten, ist entweder ein Syntax- oder ein Laufzeitfehler. Da Variablendeklarationen vom Compiler verarbeitet werden und nicht zur Laufzeit, ist es nicht sinnvoll, ein Ganzes hinzuzufügen neue Fehlerklasse nur für diesen speziellen Fall.