¿Qué significa ‘Objeto pasado por referencia’ en JS?

JavaScript tiene dos tipos de datos. Datos primitivos (cadena, número, booleano) y objetos. Los datos primitivos son inmutables (no se pueden cambiar) y generalmente ocupan menos memoria. Los objetos, por otro lado, pueden ser triviales o masivos y son mutables.

Cada vez que declara una variable en JavaScript, se reserva un lugar en la memoria para contener un valor. Ese lugar en la memoria tiene un nombre, que es el nombre de la variable (por ejemplo: var strawhat) y también una dirección (algún número aleatorio, que no es tan importante en este momento). Cuando asigna un valor a la variable (por ejemplo: strawhat = “luffy”;) el valor se copia en esa memoria reservada solo si es de tipo primitivo. Si se trata de un objeto, el valor se almacena en algún lugar de la memoria y la dirección (a menudo denominada referencia) se copia en la variable. Ahora esta variable puede pasarse a cualquier función o copiarse en otra variable.

Los datos primitivos se pasan por valor. Por ejemplo, cuando copia una variable en otra, el valor real de la primera variable se copia en la segunda variable.

Veamos un ejemplo.

// Declarando una variable que reserva un lugar en la memoria.
var paja;
// Asignación de valor a la variable.
strawhat = “luffy”;

Ahora pasemos el valor de esta variable a otra variable.

var mugiwara = sombrero de paja;

Al hacerlo, se copia el valor “luffy” en mugiwara. Y dado que los datos primitivos son inmutables, cambiar uno no afecta al otro. Ahora si cambiamos la variable mugiwara …

mugiwara = “vástagos”;

… e imprime ambas variables, mugiwara debería imprimir “vástagos” y paja debería imprimir “luffy”.

console.log (mugiwara); // imprime “vástagos”
console.log (sombrero de paja); // imprime “luffy”

Ahora, finalmente, veamos la respuesta a su pregunta.

A diferencia de los datos primitivos, los objetos se pasan por referencia. Lo que esto significa es que, cuando pasa un objeto (lo copia a otra variable o lo envía a una función), en realidad está pasando la dirección (que ha almacenado en la variable) y no el objeto completo.

Otro ejemplo.

var obj = {zoro: “espadas”, sanji: “cocinero”};

Lo que hace la declaración anterior es almacenar el objeto a la derecha en la memoria en algún lugar y asignar la dirección (referencia) a la variable obj. Y ahora si copia el obj a otra variable …

var newObj = obj;

… en realidad está copiando la dirección a la nueva variable newObj. Como ambos apuntan al mismo objeto, la modificación de un objeto modificará el otro objeto.

newObj.zoro = “katana”;
console.log (newObj.zoro); // imprime “katana”
console.log (obj.zoro); // imprime “katana”

Y esto es lo que significa “Los objetos se pasan por referencia”.

En JavaScript, los objetos se almacenan en un área de memoria llamada “montón”. Esta memoria se divide en ranuras que tienen direcciones numéricas. Una variable contiene un valor primitivo directamente (un número) o una dirección (también un número). La dirección apunta a una ranura de almacenamiento dinámico que contiene el valor real. Los objetos no son números, por lo que no se ajustan directamente a las variables, y si un objeto se asigna a una variable, internamente la variable contendrá la dirección del objeto. Pasar una variable que contiene una dirección copia efectivamente esa dirección (no el objeto real) a una nueva variable; esto se denomina “pasar por referencia”.

No sé mucho sobre Java o JavaScript, pero aquí hay una referencia a alguna información sobre los parámetros de la función JS.

Aquí hay un poco de la fuente:

En JavaScript, las referencias a objetos son valores.

Debido a esto, los objetos se comportarán como si fueran pasados ​​por referencia:

Si una función cambia la propiedad de un objeto, cambia el valor original.

Los cambios en las propiedades del objeto son visibles (reflejados) fuera de la función “.

También enumeran matones sobre varios parámetros de funciones que puede encontrar aquí: Parámetros de funciones de JavaScript

var o = {a: 1, b: 2};
var p = o; // referencia
pa = 10;
pc = “hola”;
console.log (o); // Objeto {a: 10, b: 2, c: “hola”}

En JS los objetos son tipos de referencia. Para los objetos, el operador = no es una asignación sino una referencia. En el ejemplo anterior, el objeto p no tiene un valor, sino que se refiere directamente al objeto o .