Frage

Unter dem jQuery Framework zum Beispiel, wenn Sie Code wie folgt aus:

$(document).ready(function init() { foo.bar(); });

Der Stack-Trace Sie in Firebug erhalten wird wie folgt aussehen:

init()
anonymous()
anonymous([function(), init(), function(), 4 more...], function(), Object name=args)
anonymous()
anonymous()

Wie Sie sehen können, ist es nicht sehr gut lesbar, weil Sie sich auf jede Funktion klicken müssen, um herauszufinden, was es ist. Die anonymen Funktionen würden zeigen, auch als (?)() im Profiler, und sie können auf das „ führen kann nicht closure“Fehler optimierten Zugriff. Es scheint mir, dass dies sind gute Gründe, sie zu vermeiden. Dann gibt es die Tatsache, dass ECMAScript 5 arguments.callee im strengen Modus deprecate wird, was bedeutet, es nicht möglich sein wird, anonyme Funktionen, mit ihm zu verweisen, ihnen ein wenig weniger zukunftssicher zu machen.

Auf der anderen Seite, mit dem Namen Funktionen zur Wiederholung führen kann, z.

var Foo = {
    bar: function bar() {}
}

function Foo() {}

Foo.prototype.bar = function bar() {}

Bin ich richtig in der Annahme, dass diese Wiederholung im Lichte des Debug-Komforts genannte Funktionen bieten gerechtfertigt ist, und dass die Prävalenz von anonymen Funktionen in guter Frameworks wie jQuery ist ein Versehen?

War es hilfreich?

Lösung 2

fand ich die Antwort auf meine Frage in diesem sehr informativen Artikel . Zum einen stellt sich heraus, dass ich recht genannten Funktionen mehr erwünscht zu sein, aber die Lösung ist nicht so einfach wie Bezeichner für alle anonymen Funktionen hinzufügen. Der Hauptgrund dafür ist, Funktion Ausdrücke in eine sehr gebrochenen Weise JScript implementieren.

Zum anderen gibt es eine Unterscheidung zwischen Funktion Anweisungen und Ausdrücken. Eine anonyme Funktion ist nur ein Funktionsausdruck mit der Kennung weggelassen, und das Hinzufügen einer Kennung (es Namensgebung) wäre es keine Erklärung (außer in JScript, weshalb es kaputt ist) machen. Das bedeutet, dass alle anderen Antworten off Marke waren.

Andere Tipps

Ich bin damit einverstanden gibt es bestimmte Nachteile auf anonyme Methoden in JavaScript / ECMAScript verwenden. Aber nicht übersehen, wie sie verwendet werden sollen. Für einfache Einzeiler, die Sie an eine andere Funktion übergeben werden sollen, sind sie oft sehr gut.

Aber für mich anonyme Funktionen sind besser lesbar im Quelltext, denn ich bin sicher, dass sie nur dort verwendet werden.

Anonyme Funktionen sind sehr bequem. Eine bessere Lösung, um dieses Problem, sondern die Funktionen zu nennen, wäre, wenn Firebug Sie gesagt, auf der Linie, in der die anonyme Funktion Datei erstellt wurde.

init()
anonymous() // application.js, line 54
anonymous() // foo.js, line 2

Und der Stack-Trace ist der einzige Ort, wo anonyme Funktionen sind ein Problem imo.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top