Por que cada vez que invocamos la funcion con un nuevo argumento el valor de la variable saveCoins no regresa a 0? es como si el navegado...

Pregunta de la clase:
Debugging
Johan Echeverri

Johan Echeverri

Pregunta
studenthace 4 años

Por que cada vez que invocamos la funcion con un nuevo argumento el valor de la variable saveCoins no regresa a 0?

es como si el navegador omitiera la lectura de esa linea la segunda vez que invocamos la función

const moneyBox = (coins) => { debugger var saveCoins = 0; const countCoins = (coins) => { debugger saveCoins += coins; console.log(`MoneyBox $${saveCoins}`); }; return countCoins; } let myMoneyBox = moneyBox();
4 respuestas
para escribir tu comentario
    Pablo Antipan Quiñenao

    Pablo Antipan Quiñenao

    studenthace 4 años

    Brutal el vid! Muchas gracias!!

    Didier Ricardo Irias Méndez

    Didier Ricardo Irias Méndez

    studenthace 4 años

    Al crear un nuevo contexto de ejecucíon (scope), js crear un entorno léxico que guarda las variables con sus valores anteriores (la magia del closure).

    No tiene que ver con

    var
    , funcion igual para
    let
    .

    Acá lo explican bastante bien: https://www.youtube.com/watch?v=JXG_gQ0OF74

    Sergio Andrés Bolaños Penagos

    Sergio Andrés Bolaños Penagos

    studenthace 4 años

    Creo que te entendí, te refieres a que la línea 3 no se ejecuta al invocar la otra función? Si recuerdas eso tiene que ver con el Closure, cuando invocas la función myMoneyBox(x) (qué es como si fuera la función countCoins()) estás actualizando el valor original de saveCoins, ya no es 0 sino que pasa a ser lo que estaba antes + lo que le hayas añadido con el parámetro.

    Pablo Antipan Quiñenao

    Pablo Antipan Quiñenao

    studenthace 4 años

    Hola! La funcion moneyBox retorna una funcion. Y dado que 'saveCoins' fue declarado como 'var', queda en el scope global

    Luego, en la linea

    let myMoneyBox = moneyBox();
    lo que obtienes es la funcion countCoins dentro de la variable myMoneyBox. Luego, la ejecutas; y como la variable saveCoins quedo en el scope global, se va actualizando.

    En la clase 5 del curso se explica como opera el scope.

    Saludos :)

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.