es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Usando el constructor Function() como un closure.

Estoy tratando de hacer algo así:

function simpleOperations(operation) {
let myFanction = new Function(‘a’, ‘b’, ‘a ‘ + operation + ‘ b’);
return myFanction
}

let sum = simpleOperations(“+”);
let multiplicate = simpleOperations(“*”);

console.log(“su suma es: ” + sum(3,7));
console.log(“su producto es: ” + multiplicate(3,7));

y en lugar de obtener:

su suma es: 10
su producto es: 21

estoy obteniendo esto:

su suma es: undefined
su producto es: undefined

¿Tiene alguna idea de cómo solucionarlo? 🙂

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Sí, el problema aquí es que la variable myFanction no se está ejecutando en realidad con los argumentos a y b. Para solucionar esto, necesitamos llamar a myFunction con los valores que queremos usar para a y b. Podemos hacer esto agregando paréntesis a myFunction en la declaración de retorno, así:

    function simpleOperations(operation) {
      let myFanction = new Function('a', 'b', 'return a ' + operation + ' b');
      return myFanction;
    }
    
    let sum = simpleOperations('+');
    let multiplicate = simpleOperations('*');
    
    console.log('el resultado de la suma es: ' + sum(3, 7));
    console.log('el resultado de la multiplicación es: ' + multiplicate(3, 7));
    

    Los cambios en el código son:

    • Agregado una declaración return en myFunction, para asegurarnos de que el valor calculado sea devuelto realmente.
    • Agregados paréntesis después de myFunction en la declaración de retorno, para que se llame con los argumentos a y b.

    Esto debería dar los resultados esperados:

    el resultado de la suma es: 10
    el resultado de la multiplicación es: 21
    

Comments are closed.