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 |