Estaba aprendiendo en el campamento de código libre y caí en un problema. Los arguments[1]
resultan indefinidos cuando la función se llama así nombre de functionName(arg1) (arg2)
, por lo que, por ejemplo, los arguments[1]
darían como resultado indefinidos pero usando esto lo resolvió return (second) => addTogether(first, second);
y no sé cómo una llamada de función en la función en sí podría haber accedido a algo a lo que ni siquiera los arguments[1]
pudieron acceder, ¿alguien puede explicar aquí el código completo si alguien está interesado?
function addTogether() { const [first, second] = arguments; if (typeof(first) !== "number") return undefined; if (second === undefined) return (second) => addTogether(first, second); if (typeof(second) !== "number") return undefined; return first + second; }
Cuando llama a la función usted mismo con solo un argumento, devuelve otra función.
El secreto es que el valor de first
ya está almacenado dentro del cierre que devuelve la otra función desde la primera vez que llamaste a addTogether().
La función devuelta toma el second
como argumento y luego llama a addTogether()
con el first
almacenado desde la llamada inicial y el second
acaba de pasar a la función que llama a addTogether nuevamente.
Agregué un registro de consola dentro de addTogether para mostrar los valores de primero y segundo para las dos llamadas
function addTogether() { const [first, second] = arguments; console.log('first = ',first, ', second = ', second) if (typeof(first) !== "number") return undefined; if (second === undefined) // `first` is already defined above from the first call // `second` will be passed into this new function that gets returned when you call it later return (second) => addTogether(first, second); if (typeof(second) !== "number") return undefined; return first + second; } // store the returned function as a variable const fn = addTogether(5); // now call the returned function with `second` value as parameter console.log('Total =',fn(10))//expect 15