Pregunta

Tomando el marco jQuery, por ejemplo, si ejecuta código como este:

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

El seguimiento de la pila que obtienes en Firebug se verá así:

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

Como puede ver, no es muy fácil de leer, porque tiene que hacer clic en cada función para averiguar qué es. Las funciones anónimas también aparecerían como (?) () en el generador de perfiles, y pueden conducir a " no puede acceder al cierre optimizado " insecto. Me parece que estas son buenas razones para evitarlas. Luego está el hecho de que ECMAScript 5 desaprobará argumentos.callee en su modo estricto, lo que significa que no será posible hacer referencia a funciones anónimas con él, lo que las hará un poco menos a prueba de futuro.

Por otro lado, el uso de funciones con nombre puede conducir a la repetición, por ejemplo:

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

function Foo() {}

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

¿Estoy en lo cierto al pensar que esta repetición se justifica a la luz de la conveniencia de depuración que proporcionan las funciones nombradas, y que la prevalencia de funciones anónimas en buenos marcos como jQuery es un descuido?

¿Fue útil?

Solución 2

Encontré la respuesta a mi pregunta en este artículo muy informativo . En primer lugar, resulta que tenía razón acerca de que las funciones con nombre son más deseables, pero la solución no es tan simple como agregar identificadores a todas las funciones anónimas. La razón principal de esto es que JScript implementa expresiones de función de una manera muy rota.

En segundo lugar, hay una distinción entre declaraciones de funciones y expresiones. Una función anónima es solo una expresión de función con el identificador omitido, y agregar un identificador (nombrarlo) no lo convertiría en una declaración (excepto en JScript, por lo que está roto). Esto significa que todas las otras respuestas estaban fuera de lugar.

Otros consejos

Estoy de acuerdo en que hay ciertos inconvenientes al usar métodos anónimos en JavaScript / EMCAScript. Sin embargo, no pase por alto cómo deben usarse. Para los revestimientos simples que desea pasar a otra función, a menudo son excelentes.

Pero para mí, las funciones anónimas son más legibles en el código fuente, porque estoy seguro de que solo se usan allí.

Las funciones anónimas son muy convenientes. Una mejor solución a este problema, en lugar de nombrar las funciones, sería si firebug le dijera en qué línea en qué archivo se creó la función anónima.

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

Y el seguimiento de la pila es el único lugar donde las funciones anónimas son un problema imo.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top