¿Podría alguien explicarme por qué el siguiente código no causa pérdidas de memoria? Según tengo entendido, originalThing variable se está utilizando en el cierre sin llamar y referenciado teóricamente por el cierre de algún método, por lo tanto, originalThing no debe recolectarse como basura, pero no veo ninguna pérdida de memoria cuando lo estaba perfilando en el navegador.
<script> var theThing = new Array(1000000000); var replaceThing = function () { var originalThing = theThing; var unCalled = function () { if (originalThing) return originalThing }; var obj = { longStr: new Array(1000000).join('*'), someMethod: function () {} }; }; setInterval(replaceThing, 1000); </script>Pero si cambié la variable obj a theThing, entonces causaría una pérdida de memoria, consulte el código a continuación:
<script> var theThing = new Array(1000000000); var replaceThing = function () { var originalThing = theThing; var unused = function () { if (originalThing) console.log("Hi") }; theThing = { longStr: new Array(1000000).join('*'), someMethod: function () {} }; }; setInterval(replaceThing, 1000); </script>Entonces, ¿qué diferencia hay en términos de pérdida de memoria causada por el cierre?