utiliza una tipos terminar pasar parametros para otra las instrucciones globales funciones funcion ejercicios desde dentro javascript closures

tipos - pasar variables de una funcion a otra en javascript



JavaScript: ¿Por qué el cierre solo ocurre si asigno la función de retorno a una variable? (3)

Incluso después de leer No sabes JS y JavaScript: el núcleo Todavía no podía entender el comportamiento del siguiente código.

¿Por qué, cuando llamo a counter()() , no obtengo ningún cierre, pero si asigno una variable al resultado de counter() , como var getClosure = counter() , obtengo un cierre al llamar a getClosure() ?

function counter() { var _counter = 0; function increase() { return _counter++ } return increase; } // Double ()() to call the returned function always return 0, so no closure. counter()() // returns 0 counter()() // returns 0 counter()() // returns 0 counter()() // returns 0 var createClosure = counter(); createClosure() // returns 0 createClosure() // returns 1 createClosure() // returns 2 createClosure() // returns 3


Para decirlo de otra manera, el valor de retorno de la función counter() , que es el cierre, no se conserva o, más bien, se descarta cuando simplemente llama a la función tal como está.

Sin embargo, después de asignar ese valor de retorno a var createClosure . Usted puede llamar al cierre tantas veces como sea necesario


_counter es la variable local dentro de la función counter() . Cada vez que llame a counter() _counter un nuevo _counter .

Pero var createClosure = counter() solo llamó a la función 1 vez, por eso _counter no se crea cada vez y se ''recuerda'' allí (ahí es donde ocurre el cierre)


Cada vez que llama a counter()() , crea una nueva función y un nuevo cierre. Entonces el resultado es siempre 0 .

Por el contrario, cuando var createClosure = counter(); se ejecuta, se crean una función y un cierre y se guardan en la variable createClosure . La próxima vez que llame a createClosure() , se invocará el guardado y se usará el cierre creado. Por lo tanto los resultados son 0 , 1 , 2 , 3 , ...