Biorąc ramy jQuery na przykład, jeśli uruchomić kod tak:Czy nazwane funkcje są niedoceniane w JavaScript?
$(document).ready(function init() { foo.bar(); });
Ślad stosu można uzyskać w Firebug będzie wyglądać następująco:
init()
anonymous()
anonymous([function(), init(), function(), 4 more...], function(), Object name=args)
anonymous()
anonymous()
Jak widać, nie jest to bardzo czytelny, ponieważ musisz kliknąć każdą funkcję, aby dowiedzieć się, co to jest. Anonimowe funkcje pojawią się również jako (?)()
w programie profilującym i mogą prowadzić do błędu "cannot access optimized closure". Wydaje mi się, że są to dobre powody, aby ich unikać. Jest też fakt, że ECMAScript 5 wycofa się z arguments.callee
w trybie ścisłym, co oznacza, że nie będzie można odwoływać się do anonimowych funkcji, czyniąc je nieco mniej odpornymi na przyszłość.
Z drugiej strony, za pomocą nazwanych funkcji może prowadzić do powtórzenia, np:
var Foo = {
bar: function bar() {}
}
function Foo() {}
Foo.prototype.bar = function bar() {}
Czy mam rację sądząc, że powtarzanie jest uzasadnione w świetle wygody debugowania nazwane funkcje świadczenia, a częstość występowania anonimowych funkcji w dobrych frameworkach takich jak jQuery to niedopatrzenie?
Niestety link do tego artykułu nie działa. Jednak ten sam artykuł można znaleźć tutaj: http://kangax.github.com/nfe/ – Jan