Sobes.tech
Junior

Como funciona a transferência de dados por referência e por valor?

sobes.tech IA

Resposta da IA

A transferência de dados por valor (por valor) e por referência (por referência) determina como a variável original muda ao passá-la para uma função ou ao atribuí-la.

Transferência por valor:

Uma cópia do valor da variável é criada. Quaisquer alterações nesta cópia dentro da função ou ao atribuí-la não afetam a variável original. É adequada para tipos de dados primitivos (números, strings, valores booleanos, null, undefined, Symbol, BigInt).

// Transferência por valor
let a = 10;

function modifyValue(num) {
  num = 20; // A cópia é alterada
}

modifyValue(a);
console.log(a); // Vai mostrar 10 - o valor original não mudou

Transferência por referência:

Não é o valor em si que é passado, mas uma referência (endereço na memória) a esse valor. As alterações feitas através dessa referência afetam a variável original. Em JavaScript, isso é usado para objetos (incluindo arrays e funções). É importante entender que não se passa o objeto em si, mas uma referência a ele. Quando um parâmetro é reatribuído dentro de uma função, a referência recebe um novo valor, mas a variável original não muda.

// Transferência por referência (para objetos)
let obj1 = { value: 10 };

function modifyObject(obj) {
  obj.value = 20; // A propriedade do objeto é alterada por referência
}

modifyObject(obj1);
console.log(obj1.value); // Vai mostrar 20 - o objeto original mudou
// Exemplo de reatribuição do parâmetro ao passar um objeto
let obj2 = { value: 10 };

function reassignObject(obj) {
  obj = { value: 30 }; // obj agora referencia um novo objeto na escopo local da função
}

reassignObject(obj2);
console.log(obj2.value); // Vai mostrar 10 - o objeto original não mudou
Característica Transferência por valor Transferência por referência
O que é passado Cópia do valor Referência ao valor
Impacto na original Não Sim (ao alterar propriedades)
Tipos de dados em JS Primitivos Objetos