¿Hay alguna manera de crear una función con un nombre real que se determine en tiempo de ejecución sin usar eval
, y utilizando solo JavaScript puro? (Por lo tanto, no genera script
elementos, como los que son específicos para el entorno del navegador [y de muchas maneras sería eval
disfrazada de todas formas]; no hay que usan características no estándar de un motor de JavaScript en particular, etc.)¿Hay alguna forma no-eval para crear una función con un nombre determinado en tiempo de ejecución?
Tenga en cuenta que estoy específicamente no preguntar sobre funciones anónimas referenciados por variables o propiedades que tienen nombres, por ejemplo:
// NOT this
var name = /* ...come up with the name... */;
var obj = {};
obj[name] = function() { /* ... */ };
Allí, mientras que la propiedad objeto tiene un nombre, la funciónno lo hace. Las funciones anónimas están bien para muchas cosas, pero no es lo que estoy buscando aquí. Quiero que la función tenga un nombre (por ejemplo, que aparezca en las pilas de llamadas en los depuradores, etc.).
¿Qué tiene de malo la función anónima? – PiTheNumber
@PiTheNumber: No dije que fueran malas. :-) De hecho, dije * "Las funciones anónimas están bien para muchas cosas ..." * Pero las funciones anónimas aparecen en las pilas de llamadas y, por ejemplo, "(anónimo)" (o similar), lo cual es menos que útil. Me gusta [ayudar a que mis herramientas me ayuden] (http://blog.niftysnippets.org/2010/03/anonymouses-anonymous.html), así que doy mis nombres a las funciones siempre que puedo. En este caso, estoy escribiendo una función función de fábrica en una biblioteca, y la decisión de si vale la pena tenerlo (opcionalmente) asignar las funciones nombres reales, o vivir sin nombre o un nombre estático en este caso. –
mh, ya veo tu punto. Bueno, pensaré en evitar las funciones anónimas. ¡Gracias! – PiTheNumber