Como percebes o que é passar por referência?
sobes.tech IA
Resposta da IA
Em JavaScript, os tipos de dados primitivos (strings, números, valores booleanos, null, undefined, Symbol, BigInt) são passados por valor. Isto significa que, ao atribuir ou passar para uma função, o valor em si é copiado.
Os objetos (incluindo arrays e funções) são passados e copiados por referência. Na prática, não é o objeto em si que é copiado, mas a referência à área de memória onde ele está armazenado.
// Passagem por valor
let a = 10;
let b = a; // O valor 10 é copiado
b = 20;
console.log(a); // 10, alterar 'b' não afeta 'a'
// Passagem por referência
let obj1 = { value: 10 };
let obj2 = obj1; // A referência ao objeto é copiada
obj2.value = 20;
console.log(obj1.value); // 20, alterar através de 'obj2' afeta 'obj1', pois apontam para o mesmo objeto
Ao passar um objeto para uma função, a função recebe uma cópia da referência. Alterar as propriedades do objeto dentro da função afetará o objeto original, porque a referência é a mesma. No entanto, se dentro da função for atribuído um novo objeto à variável, o objeto original permanecerá inalterado, pois a referência apontará para outra área de memória.
function modifyObject(obj) {
obj.newValue = 30; // Modifica o objeto original
}
function assignNewObject(obj) {
obj = { anotherValue: 40 }; // A variável 'obj' dentro da função agora aponta para um novo objeto
}
let myObject = { initialValue: 10 };
modifyObject(myObject);
console.log(myObject); // { initialValue: 10, newValue: 30 }
let anotherObject = { initialValue: 10 };
assignNewObject(anotherObject);
console.log(anotherObject); // { initialValue: 10 }, o objeto original não mudou