In JavaScript Die folgenden beiden Codeblöcke scheinen identische Ergebnisse zu liefern:
(function () { bar = 'bar'; alert('foo'); })(); alert(bar);
(function () { bar = 'bar'; alert('foo'); }()); alert(bar);
Beide Blöcke zeigen die Meldung „foo“ gefolgt von „bar“ an. Gibt es jedoch einen funktionalen Unterschied zwischen diesen beiden Codestrukturen?
Codeblöcke sind identisch
Unter normalen Umständen "(Funktion ( ) { }) ()“ und „(function () { })()“ sind in JavaScript funktional identisch. Beide rufen eine anonyme Funktion auf und führen sie sofort aus. Die Funktion initialisiert die Balkenvariable und gibt die Meldung „foo“ aus.
Wenn dem Code jedoch zusätzliche Syntax hinzugefügt wird, können Unterschiede auftreten.
Betrachten Sie den folgenden Code:
new (function () { this.prop = 4; }) ().prop;
Dieser Code erstellt eine neue Instanz der Funktionsklasse und ruft die Prop-Eigenschaft der neuen Instanz ab. Es gibt den Wert 4 zurück.
Betrachten Sie den folgenden Code:
new ( function() { return { Class: function() { } }; }() ).Class;
Dieser Code ruft den neuen Operator für die Class-Eigenschaft auf. Aufgrund der verschachtelten Klammern wird die Funktion normal aufgerufen und ihr Rückgabewert wird zum Erstellen einer neuen Instanz verwendet.
Das obige ist der detaillierte Inhalt vonSind \'(function () { }) ()\' und \'(function () { })()\' in JavaScript funktionell gleich?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!