Acabo de empezar a aprender cierres en JavaScript y estoy tratando de entender un problema básico.
Por ejemplo, estoy tratando de implementar el método sum: sum(1)(4)(5)
const sum = (a) => { return (b) => { if(typeof b === 'number') return sum(a+b) return a; } } Cuando llamo: console.log(sum(1)(4)(5)()) funciona perfectamente y devuelve 10. Sin embargo, si llamo a console.log(sum(1)(4)(5)) , devuelve [Function (anonymous)] . ¿Por qué?
Gracias
Cada vez que llamas a tu función como:
sum(1)(10)estás devolviendo la función interna:
(b) => { if(typeof b === 'number') return sum(a+b) return a; }Porque el tipo de b === 'número' y está devolviendo sum(a+b) que llama nuevamente a la función sum y devuelve nuevamente la función interna. Es por eso que cuando finalmente pones el último paréntesis como:
sum(1)(10)()La función interna se ejecutará y el tipo de b en este caso es diferente del número y devolverá 'a' que ya contiene la suma de los valores.