Was passiert in JavaScript, wenn ich die "traditionelle" C-Style-Funktionsdeklaration verwende?

8

Ich weiß, dass es mehrere Möglichkeiten gibt, eine Funktion in JavaScript zu definieren. Zwei der häufigsten sind:

%Vor%

Ich bin mit der Idee einer Funktion als ein Objekt vertraut, das wie jede andere Variable weitergegeben werden kann. Also ich verstehe perfekt was (2) macht. Es erstellt eine Funktion und weist add (sagen wir, das ist im globalen Bereich, also add ist eine globale Variable) die genannte Funktion zu. Aber was passiert, wenn ich stattdessen (1) verwende? Ich weiß bereits, dass es einen Unterschied in der Ausführungsreihenfolge macht: Wenn ich (1) verwende, kann ich auf add() vor dem Punkt im Code verweisen, wo add() definiert ist, aber wenn ich (2) verwende, dann muss ich Weisen Sie meine Funktion add zu, bevor ich auf add() verweisen kann.

Ist (1) nur eine Abkürzung für (2) , wenn auch eine, die sich wie andere C-Stil-Sprachen verhält und uns erlaubt, eine Funktion "unterhalb" des Punktes zu definieren, an dem sie benutzt wird? Oder ist es intern eine andere Art von Funktion? Was ist mehr "im Geiste" von JavaScript (wenn das nicht zu vage ist)? Würdest du dich auf den einen oder anderen beschränken, und wenn ja welchen?

    
Hammerite 26.09.2010, 17:33
quelle

2 Antworten

6

Es sieht so aus, als ob Sie bereits die Hauptmerkmale von Funktionsdeklarationen 1 (1) und Funktionsausdrücke (2). Beachten Sie auch, dass es in (1) immer noch eine lokale Variable namens add gibt, die wie in (2) einen Funktionswert enthält:

%Vor%

Ein weiterer erwähnenswerter Punkt ist, dass Funktionsdeklarationen (1) nicht zum bedingten Definieren von Funktionen verwendet werden sollten (wie in if -Anweisungen), weil sie, wie Sie bereits erwähnt haben, automatisch sind durch den JavaScript-Interpreter 2 an den Anfang des enthaltenden Bereichs verschoben. Dies wird normalerweise auch als Hochziehen bezeichnet.

>

Was für einen Ansatz eher im Sinne von JavaScript ist, verwende ich lieber Funktionsausdrücke (2). Für eine autoritativere Meinung, Douglas Crockford listet Funktionsdeklarationen (1) im Kapitel "Schlechte Teile" in seinem populären Das Buch Gute Teile 2 .

1 Auch bekannt als Funktionsanweisungen (Siehe @Tim Downs Kommentare unten).
2 Tatsächlich sind einige Browser in der Lage, Funktionsdeklarationen in if -Anweisungen zu handhaben (siehe auch die unten stehenden Kommentare).
3 JavaScript: Die guten Teile - Anhang B: Seite 113.

>     
Daniel Vassallo 26.09.2010, 17:42
quelle
2
%Vor%

So erklärt es eine benannte Funktion. Egal welche Variable darauf zeigt, der Name bleibt erhalten. Bei der anderen Syntax handelt es sich um eine anonyme Funktion, die namenlos ist und nur dann aufgerufen werden kann, wenn sie von einer Variablen referenziert wird.

%Vor%

Was den zu verwendenden Stil betrifft, gibt es keine wichtige Regel. Obwohl ich persönlich die anonyme Syntax favorisiere, erinnert sie mich daran, dass Funktionen tatsächlich Objekte sind, die herumgereicht werden können. Ich tendiere auch dazu, den Ansatz "Es ist alles in einem großen Master-Objekt" zu bevorzugen, der erfordert, dass Funktionen auf diese Weise deklariert werden.

%Vor%

Aber nachdem die Funktionen erstellt wurden, sind die Unterschiede nicht wirklich wichtig und verhalten sich gleich. Aber die anonyme Syntax hat weniger von der Scan-Ahead-Magie, die Sie erwähnt haben, und weniger Bugs in komplexem Code und in seltsamen Scoping-Situationen.

    
Alex Wayne 26.09.2010 17:43
quelle

Tags und Links