2016-07-02 8 views
1

WarumFunktion in Javascript aus Bedingungsanweisung Hebe

var y = 1; 
    if (function f(){}) { 
    y += typeof f; 
    } 
    console.log(y); // 1undefined 

Bevor Code ausgeführt nehme ich es 1function

sein wird, nehme ich an, dass hinter Funktion Hebe f für alle Code sichtbar sein soll. Können Sie eine solche Verhaltensbeschreibung verlinken?

P. S> bei Blog-Post, wo ich dieses Beispiel finden es gibt Erklärung

Der Ausgang 1undefined würde. Die if-Bedingungsanweisung wird mit eval ausgewertet, sodass eval (Funktion f() {}) die Funktion f() {} zurückgibt (was wahr ist). Daher gibt die Ausführung von f in der if-Anweisung undefined zurück, da der if-Anweisungscode zur Laufzeit ausgeführt wird und die Anweisung innerhalb der if-Bedingung zur Laufzeit ausgewertet wird.

Aber es spielt keine Situation klarer machen hier

+0

was ist die Frage? und was ist der Zweck? –

+0

Ich nehme an, es wird "1function" –

+0

Ich weiß, aber warum versuchen Sie das zu tun? Kannst du ein Beispiel aus der realen Welt geben? Ich bin nur neugierig –

Antwort

3

Die Verwirrung ist, dass die Syntax function fName() {} mehrdeutig ist und hängt vom Kontext.

Allein, es ist eine Funktionsdeklaration und wird daher gehisst. In bestimmten Kontexten ist es jedoch ein (benannter) Funktionsausdruck und daher nicht.

Aus diesem Grund sehen Sie IIFEs, die als (function() {..})() oder !function() {..}() deklariert sind, um sie zu Funktionsausdrücken anstelle von Deklarationen zu zwingen.

Das Wichtige bei benannten Funktionsausdrücken ist, dass ihr Name im Wesentlichen lokal für die Funktion selbst ist und außerhalb dieser Funktion nicht zugänglich ist. Deshalb fügt += f in Ihrem Code undefined an.

Natürlich ist das alles völlig sinnlos. Warum sollte irgendjemand, der in seinen besten Köpfen ist, solchen Code schreiben? Also würde ich Sie gerne mit diesem verlassen: https://youtu.be/RAA1xgTTw9w :)