Me gustaría entender acerca de este comportamiento particular de Javascript. Tengo un objeto definido en el ámbito principal.
En un ámbito anidado, creé una variable que hace referencia a un atributo de objeto particular (una matriz) de mi objeto. Usando esta variable (una referencia) actualicé el atributo del objeto. Pero publique el bloque anidado, ¿descubro que mi actualización se perdió?
Traté de envolver mi cabeza alrededor de esto, pero estoy atascado.
¿Creo que la variable dentro del bloque anidado myOldRef debería poder acceder al objeto definido en el bloque principal y, por lo tanto, debería poder actualizarlo a través de una referencia? Además, ¿cómo se "retrocede" el valor al valor anterior? ¿Javascript está creando una copia del objeto dentro del bloque anidado?
¿Me estoy perdiendo de algo? Me gustaría saber las complejidades de este comportamiento.
Aquí está el código en cuestión.
var a = { a: 'Hello', b: 'World', c: { mList: [0,1,2,3] } } let myRef = a['c']['mList']; let myOldRef; console.log(`First time: ${myRef}`); myRef = [4,5,6,7]; console.log(`After first update: ${myRef}`); if(true) { myOldRef = a['c']['mList']; let myNewRef = [3,4,5,6]; myOldRef = myNewRef; console.log(`Inside nested block, After update: ${myOldRef} -- why is this update lost?`); } console.log(`Outisde nested block, After update: ${myRef}`);También puede ejecutar el código aquí en repetición si lo desea.