dedlfix: JavaScript: anonyme Funktion

Beitrag lesen

Tach!

Der hat einige fragwürdige Begriffsverwendungen drin. "Anonyme Funktionen sind Funktionen ohne Namen, die sofort ausgeführt werden." - Nö, die müssen nicht sofort ausgeführt werden. IIFE-Konstrukte werden sofort ausgeführt, aber auf alle anderen anonymen Funktionen trifft das nicht zu.

"Selbst-aufrufende Funktion". Das ist eine IIFE, die er da beschreibt. Die wird ebenfalls aufgerufen. Die ruft sich nicht selbst auf, das wäre bei Rekursion der Fall.

Der Artikel stellt außerdem anonyme Funktionen als Möglichkeit zur Kapselung dar. Das kann eine benannte Funktion genausogut.

Der hat einige Aspekte aufgezählt, die gegen einen Einsatz anonymer Funktionen sprechen. Seine Argumente sind im Wesentlichen nachvollziehbar. Manch ein Funktionsinhalt ist aber so simpel, dass man die negativen Effekte vernachlässigen kann.

Achja, der andere Artikel zählt auch ein paar Argumente am Ende auf. Worin ich beiden nicht zustimme, ist die nicht vorhandene Wiederverwendbarkeit. Wenn ich die Funktion einer Variablen zuweise, ist sie sehr wohl wiederverwendbar. Andererseits ist Wiederverwendbarkeit auch keine in jedem Fall notwendige Eigenschaft. - Mit Strukturierung kann man ein komplexes System nicht weniger komplex machen, man kann es aber in kleine, besser verständliche Teile aufteilen. Zu viel Aufteilung kann aber auch wieder ins Gegenteil umschlagen, denn ein Projekt, das sich in zu viel Klein-Klein verzettelt hat, macht es nicht unbedingt einfacher, all das im Auge zu behalten.

Würdet ihr auch vor einem exzessiven Einsatz warnen?

Vor jedem unbedachten Einsatz sollte gewarnt werden. Das trifft aber auf alles zu, nicht nur auf anonyme Funktionen.

Welche Nutzen gibt es? Empfehlen IIFE zu nehmen?

Die IFFE hat ihren speziellen Einsatzzweck. Ein Ersatz für jegliche andere Art anonymer Nutzung ist sie auf keinen Fall.

Wo sollte denn so etwas stehen?

[JavaScript/Funktion#anonyme Funktion](http://wiki.selfhtml.org/wiki/JavaScript/Funktion#anonyme Funktion)

Da steht sie schon. Ein Funktionsausdruck ist bereits eine anonyme Funktion. Es klingt erstmal paradox, denn wenn man sich var foo = function() {}; so ansieht, und dazu vielleicht noch einen Aufruf à la var qux = foo();, der sich in nichts von einem Aufruf einer benannten Funktion unterscheidet, müsste man meinen, dass foo ihr Name ist. Ist er aber nicht. Das ist nur eine Variable, die auf die anonyme Funktion verweist. var bar = foo; Die Funktion hat nun zwei Namen? Mitnichten, sie hat immer noch keinen, auch wenn jetzt bereits zwei Variablen draufzeigen.

dedlfix.