¿Puede alguien ayudarme a explicar por qué la propiedad de valor de obj1 sigue siendo la misma mientras que en obj2 cambia? Sé que tiene que ver con la asignación de obj1 a obj2 dentro de la función de cambio, pero no estoy exactamente seguro de por qué. ¡Gracias!
let obj1 = { value: "a" } let obj2 = { value: "b" } function change(obj1, obj2) { obj1 = obj2 obj1.value = "c" } change(obj1, obj2); console.log("obj1: ", obj1, "obj2: ",obj2);Vamos a cambiar el nombre de algunas variables para que puedas ver lo que está pasando
let obj1 = { value: "a" } let obj2 = { value: "b" } function change(param1, param2) { param1 = param2 param1.value = "c" } change(obj1, obj2); console.log("obj1: ", obj1, "obj2: ",obj2); Ahora, como puede ver, obj1 nunca cambia. Lo que está cambiando es el parámetro de la función de change que tiene el mismo nombre que la variable del ámbito externo.
Esto se debe a que las variables de los objetos son en realidad punteros al objeto. Es por eso que cuando se pasan a una función, cualquier cambio en las propiedades del puntero cambiaría el objeto real. Mientras que, si simplemente asigna un valor a una variable de tipo objeto, entonces se cambia el puntero en sí, no el objeto.
Entonces obj1 = obj2 establece que el puntero obj1 sea el puntero obj2. Ahora, si obj1.value = "c" , entonces una propiedad del objeto obj1 (que ahora es obj2) cambiará, afectando al objeto original.