// FYI same thing happens when using a full syntax const a = () => { return "hello world" } const aString = a.toString() const b = new Function(aString) console.log(b()); // undefined Entonces b es un cierre de a y no pude encontrar una opción para evitar el envoltorio. ¿Alguien sabe cómo recuperar la función sin un cierre?
new Function espera un cuerpo de función como argumento, como se indica en mdn :
Una cadena que contiene las declaraciones de JavaScript que comprenden la definición de la función.
Los parámetros de la función no están incluidos: se pueden pasar como argumentos separados.
Hay al menos dos formas de hacer que esto funcione:
eval (pero en su edición de la pregunta que escribe, esto no es posible para su caso; consulte la alternativa): const a = () => { return "hello world" } const aString = a.toString() const b = eval(aString) console.log(b()); // "hello world" Descargo de responsabilidad: cuando la función stringified no está completamente bajo su control, tiene peligros de inyección de código similares a los de la new Function
new Function , agregue return y ejecútelo; esto desenvuelve el envoltorio: const a = () => { return "hello world" } const aString = a.toString() const b = new Function("return " + aString)(); console.log(b()); // "hello world"