JavaScript

Tres métodos para crear una función desde una cadena de texto en JavaScript

En ciertas ocasiones puede ser necesario crear funciones a partir de una cadena de texto. Permitiendo así añadir nuevas funcionalidades al código sin necesidad de modificar el programa original. Algo que puede ser un problema de seguridad debido a que se podría ejecutar cualquier código, pero aún así puede ser útil. A continuación, se van a presentar tres métodos para crear una función desde una cadena de texto en JavaScript.

Los métodos expuestos en esta entrada solamente se deben utilizar cuando sea estrictamente necesario. Cuando no exista otra alternativa mejor para implementar la funcionalidad. El uso tanto de eval como Function presentan serios problemas de seguridad ya que en ambos casos se facilita la inyección de cualquier código que puede alterar el correcto funcionamiento del programa. Incrementa el tiempo de ejecución debido a que el código no se puede optimizar. Además, hace que sea más complicada la depuración de los programas.

Utilización de la función eval

La función eval de JavaScript permite ejecutar el contenido de las cadenas de texto como si fuese una línea más del programa. Pudiendo modificar las variables. Por lo que un método con el que se pueden funciones en tiempo de ejecución. Así para crear una función que pueda sumar dos números se puede utilizar.

eval('var fun = function (a, b) { return a + b; }')

Mediante lo que se creará una nueva función llamada fun que implementa la suma de dos números.

El constructor Function

Otra forma con la que se puede crear código a partir de una cadena de texto es mediante el constructor Function. Tal como indica su nombre permite construir objetos tipo función, siendo sus parámetros son los parámetros y el cuerpo de la nueva función. Así, para crear una función que sume dos valores se puede hacer con la siguiente línea de código.

var fun = new Function('a', 'b', 'return a + b;');

Al igual que en el caso anterior se puede crear una función con cualquier código.

El constructor Function más la palabra clave return

El constructor Function también permite construir funciones utilizando return antes de llamar a una función. Así en el caso de que se tenga la función completa en una variable se puede crear la función con este constructor.

var func = new Function('return' + 'function (a, b) { return a + b; }')();

Nótese que en esta ocasión al finalizar el código se incluye dos paréntesis para guardar la función en la variable.

Conclusiones

En esta entrada se han visto tres métodos para crear una función desde una cadena de texto en JavaScript. Lo que permite incluir la posibilidad de modificar el funcionamiento de los programas sin modificar el código. Aún así estos deberían ser básicamente una curiosidad, ya que su utilización produce programas con problemas de seguridad y difíciles de depurar.

Imágenes: Pixabay (Free-Photos)

¿Te ha parecido de utilidad el contenido?

Daniel Rodríguez

Share
Published by
Daniel Rodríguez

Recent Posts

Interés compuesto: la fuerza que multiplica tu dinero (y los errores que la anulan)

“El interés compuesto es la octava maravilla del mundo. El que lo entiende lo gana…

3 días ago

Cómo comparar datos con barras en Matplotlib: agrupadas, apiladas y porcentuales

Tienes los datos de ventas de tres productos en dos años distintos y quieres saber…

5 días ago

Costes hundidos en ciencia de datos: cuándo mantener un modelo y cuándo migrar

Imagina la situación. Tu equipo lleva tres años con un modelo en producción. No es…

1 semana ago

WOE e IV: La Base Matemática del Credit Scoring

Cuando un banco evalúa una solicitud de crédito necesita responder a una pregunta aparentemente simple:…

2 semanas ago

Lanzamiento de la versión 1.0 del laboratorio de Analytics Lane con nuevas herramientas de scoring

En el octavo aniversario de Analytics Lane seguimos ampliando nuestro laboratorio de aplicaciones interactivas y,…

2 semanas ago

¡Analytics Lane cumple ocho años!

Hoy, 2 de mayo de 2026, Analytics Lane cumple exactamente ocho años. Todo empezó con…

2 semanas ago

This website uses cookies.