Es por eso que cuando se vuelve a invocar a la función makeIncrementer() pero con otro valor (7), el resultado de la anterior se mantiene.
let incrementBySeven =makeIncrementer(forIncrement:7)incrementBySeven()// 7
El valor de incrementBySeven es 7
incrementByTen()
El valor de incrementByTen ahora es 40, ya que mantiene el valor anterior (30)
Genial tu resumen! 👍
Realmente este modulo se me ha hecho muy complicado, creo que mas que toda esta carrera de ios (Hasta el momento). Pero con esta clase me quedo todo mas claro.
Recuerden que lo mas importante es practicar y picarle a las cosas
🤯
Por tanto cada vez que yo creo una variable a partir de llamar a una función que me devuelve un clousure, o que me devuelve una función a su vez, cada una de ellas tiene sus variables locales capturadas por el clousure.
Otra forma más simplificada, aunque no tan legible, pero lo dejo como opción:
El runningTotal ++está declarado dentro de++ incrementByTen
.
Cada “variable” ( = func -> closure) tiene ++variables locales++ “capturadas” por el closure
.
Llamar a incrementByTen() , es como llamar a incrementer() que por debajo solo hace referencia a la ++variable local++ runningTotal , sumarle el ++amount++ (que también queda capturada) y retornar la suma.
|
amount no cambia y runningTotal es cambiada por el closure.
|
al inicio puede marear un poco :D
Hola,
Como es que el var runningTotal = 0 no se inicializa en cada vez que llamamos a la funcion? no me queda muy claro como guarda el "estado" y no se inicializa en cada llamada
gracias
un saludo
Siguiendo la misma logica se puede hacer un Decreaser. Donde puedes restar e ir reduciendo cada vez mas en los números negativos.