Hola, estoy haciendo una entrevista de codificación de javascript, para prepararme para una próxima. tenía una pregunta que me confundió un poco. La pregunta es la siguiente:
¿Qué concepto se ilustra a continuación?
function makeAdder(x) { return function (y) { return x + y; }; } var addFive = makeAdder(5); console.log(addFive(3));Había 4 respuestas para elegir y luego está: Currying y Closure
Pensé que ambos tenían razón. Terminé eligiendo curry, pero realmente pensé que esto también ilustraba cierres. ¿Podría explicar por qué esto no ilustra los cierres?
Currying es siempre una sintaxis Sugar para cierres. No llama a una función. Simplemente lo transforma.
Para su caso anterior, son solo cierres porque está tomando otra variable que almacena la función interna y se ejecuta de manera diferente. Al igual que addFive, es una función interna que se invoca más tarde.
Si desea curry, sería como el siguiente ejemplo que he creado. Currying es el concepto de cierre, debido a sus llaves de ejecución principales que ayudan a las ejecuciones de funciones internas al mismo tiempo. Entonces, aquí no tiene que tomar otra variable para almacenar para llamar a la función interna.
Por definición, curry debería convertir sum(a, b, c) en sum(a)(b)(c).
function makeAdder(x) { return function (y) { return x + y; }; } console.log(makeAdder(5)(3));