Tomando el marco jQuery por ejemplo, si ejecuta código como este:¿Las funciones nombradas están infravaloradas en JavaScript?
$(document).ready(function init() { foo.bar(); });
El seguimiento de la pila que se obtiene en Firebug se verá así:
init()
anonymous()
anonymous([function(), init(), function(), 4 more...], function(), Object name=args)
anonymous()
anonymous()
Como se puede ver, no es muy legible, porque tiene que hacer clic en cada función para averiguar de qué se trata. Las funciones anónimas también aparecerían como (?)()
en el generador de perfiles, y pueden conducir al error "cannot access optimized closure". Me parece que estas son buenas razones para evitarlos. Luego está el hecho de que ECMAScript 5 depreciará arguments.callee
en su modo estricto, lo que significa que no será posible hacer referencia a funciones anónimas con él, por lo que son un poco menos a prueba de futuro.
Por otro lado, el uso de funciones con nombre puede llevar a la repetición, por ejemplo:
var Foo = {
bar: function bar() {}
}
function Foo() {}
Foo.prototype.bar = function bar() {}
Estoy en lo correcto al pensar que esta repetición se justifica a la luz de la conveniencia de depuración funciones con nombre proporcionan, y que la prevalencia de funciones anónimas en buenos marcos como jQuery es un descuido?
Lamentablemente, el enlace a ese artículo ya no funciona. Sin embargo, el mismo artículo se puede encontrar aquí: http://kangax.github.com/nfe/ – Jan