2016-08-09 30 views
-1

Ich dachte, ich verstehe die Natur der sofort aufgerufenen Funktionsausdrücke (IIFEs), aber jetzt merke ich, dass ich nicht.Umfang eines benannten IIFE-Namens

Ich habe eine IIFE in einem Stück Code (in einer Webseite mit JQuery, wie es passiert) erstellt. Wenn ich jedoch die Funktion benenne und versuche, diese Funktion aus dem umschließenden Bereich aufzurufen, erhalte ich einen "undefinierten" Fehler?

Der Live-Code verhält sich in IE11 und Firefox 38 anders, was die Sache noch verwirrender macht. Allerdings habe ich einen einfachen Test JSfiddle hier-

https://jsfiddle.net/ktqq4uat/

und dies steht im Einklang zwischen den Browsern.

Ich dachte, diese beiden Lines-

(function myFunction2() { 
    ... 

    (myFunction3= function() { 
    ... 

ziemlich gleichwertig waren, aber ich bekomme einen undefinierten Fehler auf „MyFunction2“ nur. sowie es interne Umfang. Was ist der Umfang dieses Namens

würde ich etwas Hilfe understanding-

1) Warum (Funktion MyFunction2() schätzen {... ist der Name der Funktion versteckt?

2) Warum sich myFunction2 und myFunction3 oben anders verhalten.

Rgds

+0

IIFE ist eine in Klammern eingeschlossene Funktion, die außerhalb von ihnen nicht verfügbar ist. Obwohl du sie darin nennen kannst. – Rajesh

+0

Sie können nicht 'testObject.newFunction2 = myFunction2;', es ist nicht sichtbar außerhalb –

+0

Was, IE11 immer noch nicht behoben IE6 Bug? – Bergi

Antwort

0

benannte Funktion Ausdrücke erstellen nur eine Variable, dass:

  • den gleichen Namen wie die Funktion hat
  • einen Wert hat, einen Verweis auf diese Funktion ist

in ihrem eigenen Bereich. Sie werden auch als Referenz für diese Funktion ausgewertet, sodass Sie diese Referenz irgendwo weitergeben können (z. B. an myFunction3 zuweisen).

Funktionserklärungen erstellen Sie eine Variable wie diese in ihrem übergeordneten Bereich. Sie werden nicht als etwas bewertet (weil sie keine Ausdrücke sind).