<code>&lt;code&gt; const moneyBox = () =&gt; { var saveCoins = 0; const countCoins = (coins) =&gt; { saveCoins += coins;...

Pregunta de la clase:
¿Qué es un closure?
javier partida valle

javier partida valle

Pregunta
studenthace 4 años
<code> const moneyBox = () => { var saveCoins = 0; const countCoins = (coins) => { saveCoins += coins; console.log(`MoneyBox: $${saveCoins}`); } return countCoins; } </code>

Hay una cosa que no entiendo, ¿Cómo la función countCoins recibe el parámetro coins si no está en la función moneyBox?

5 respuestas
para escribir tu comentario
    Nelson Gonzalez Escalante

    Nelson Gonzalez Escalante

    studenthace 4 años

    Adicional a las explicaciones brindadas por hec_lopz, es importante tomar en cuenta que al momento de invocar la segunda funcion de nombre countCoins en la tercera linea del codigo no se le esta agregando los parentesis (), esto quiere decir que estamos pasando el objeto completo dentro del return de la funcion lo cual permite recibir el parametro coins.

    NOTA: Una caracteristica de JavaScript es que las funciones de ++alto orden++ son consideradas como Objetos.

    Héctor Eduardo López Carballo

    Héctor Eduardo López Carballo

    studenthace 4 años

    Hola!

    No porque

    moneyBox
    no recibe ningún parámetro.
    moneyBox
    solo crea un closure en el que está definida la variable
    saveCoins
    y también la función
    countCoins
    , esta última es la que recibe el parámetro, pero no es posible acceder a ella sin antes haber ejecutado
    moneyBox
    . Si ejecutas la función así
    const funcion = moneyBox()
    y luego imprimes la variable
    funcion
    , te vas a dar cuenta que trae el mismo contenido que la función
    countCoins
    .

    javier partida valle

    javier partida valle

    studenthace 4 años

    Imagino que será algo propio del lenguaje, en el caso de que añada coins como argumento en moneyBox, ¿Funcionaría igualmente?

    Héctor Eduardo López Carballo

    Héctor Eduardo López Carballo

    studenthace 4 años

    Hola!

    Eso es porque la fución

    moneyBox
    "retorna" la función
    countCoins
    y esta última SÍ recibe un parámetro. Entonces cuando tu ejecutas la función moneBox y guardas su resultado en una variable que se llame "caja", por ejemplo, al ejecutar
    caja()
    estarías ejecutando
    countCoins
    .

Curso de Closures y Scope en JavaScript

Curso de Closures y Scope en JavaScript

Como desarrollador JavaScript debes comprender a la perfección los diferentes alcances que tienen tus variables cuando son declaradas. En este curso aprenderás todos los conceptos fundamentales de Scope global y local, cómo declarar variables con const, let y var. Con ejercicios prácticos domina el uso de Closures en tus desarrollos.

Curso de Closures y Scope en JavaScript
Curso de Closures y Scope en JavaScript

Curso de Closures y Scope en JavaScript

Como desarrollador JavaScript debes comprender a la perfección los diferentes alcances que tienen tus variables cuando son declaradas. En este curso aprenderás todos los conceptos fundamentales de Scope global y local, cómo declarar variables con const, let y var. Con ejercicios prácticos domina el uso de Closures en tus desarrollos.