El ejemplo básico:La operación de asignación de Javascript es copiar referencias?
var b = 10;
var c = b;
b++;
console.log(b,c);
>> 11 10
c
parece una copia de b
.
Pero en otro caso:
var x = {};
var y = x;
x.abc = 10;
console.log(x.abc, y.abc);
>> 10 10
¿Por qué es el y
no una copia de x
, sino una referencia que apunta a la misma instancia x
puntos a?
Además, supongo que b++
crea otra instancia, por lo que b
apunta a la nueva instancia pero c
apunta al anterior. Sin embargo ...
var u = 10;
setTimeout(function() {
console.log(u);
}, 10000)
u++;
>> 11
Si u++
crea una nueva instancia, entonces el u
dentro de la función anónima debe apuntar a la edad u
, ¿no debería?
tu última frase en realidad resuelve mi confusión. –
@Quentin: por lo que el "objeto" original solo reside en algún lugar dentro del 'objeto de activación' o 'entorno léxico' creado por la implementación js (ES3/5) y nunca puede ser tocado por E CMAscript en sí. – jAndy
"Ambas son referencias del mismo valor inmutable". ¿Eso no contradice la salida observada "11 10"? La salida sugeriría que son referencias a diferentes valores – Neptilo