No entiendo porque cuando instalo dos veces el objeto de la función Gadget, la consola me imprime 2 finales, no 1, el contador se incrementa.
var Gadget = (function(){ var counter = 0; return function(){ console.log( counter += 1 );} })(); var g1 = new Gadget(); var g2 = new Gadget();Si no ejecuto inmediatamente la expresión de la función, no obtengo ningún resultado:
var Gadget = (function(){ var counter = 0; return function(){ console.log( counter += 1 );} }); // <---- not immediate execute expression var g1 = new Gadget(); var g2 = new Gadget();Ninguna salida.
En el primer bloque de código.
var Gadget = (function(){ var counter = 0; return function(){ console.log( counter += 1 );} })(); var g1 = new Gadget(); var g2 = new Gadget(); Gadget será igual a la función interna, function(){ console.log( counter += 1 ) , y porque capturará el valor del contador mediante la función Closure .
Entonces, el counter se incrementará con la ejecución del Gadget .
En la segunda sección
var Gadget = (function(){ var counter = 0; return function(){ console.log( counter += 1 );} }); // <---- not immediate execute expression var g1 = new Gadget(); var g2 = new Gadget(); Debido a que la función no se ejecuta inmediatamente, la función Gadget será igual a la función externa, no a la función interna.