JavaScript Fundamentals

Passagem de Parâmetros em JavaScript: Passagem por Valor e Passagem por Referência

Spread the love

O tratamento de passagem de parâmetros em JavaScript é uma fonte frequente de confusão, frequentemente debatido como passagem por referência ou passagem por valor. A realidade é mais matizada: JavaScript emprega um mecanismo que combina aspectos de ambos, dependendo inteiramente do tipo de dado envolvido.

Sumário

Entendendo Passagem por Valor com Primitivos

Os tipos de dados primitivos do JavaScript — number, string, boolean, null, undefined, bigint e symbol — operam usando passagem por valor. Quando um primitivo é passado para uma função, uma cópia do seu valor é criada e passada. Modificações dentro da função afetam apenas esta cópia, deixando a variável original intocada.


let x = 10;

function changeValue(y) {
  y = 20;
}

changeValue(x);
console.log(x); // Saída: 10

Neste exemplo, alterar y dentro de changeValue não altera o x original.

Compreendendo Passagem por Referência com Objetos

Objetos em JavaScript (incluindo arrays e funções) se comportam de forma diferente. Quando um objeto é passado para uma função, o que é passado é uma referência — um ponteiro para a localização de memória do objeto. Portanto, quaisquer modificações feitas nas propriedades do objeto *dentro* da função afetam diretamente o objeto original.


let myArray = [1, 2, 3];

function modifyArray(arr) {
  arr.push(4);
}

modifyArray(myArray);
console.log(myArray); // Saída: [1, 2, 3, 4]

Aqui, myArray é modificado porque a função altera o próprio objeto, não uma cópia.

Entretanto, existe uma distinção crucial: atribuir o parâmetro a um objeto *novo* dentro da função não modifica o original.


let myObject = { a: 1 };

function reassignObject(obj) {
  obj = { a: 2 }; // Atribuindo um novo objeto
}

reassignObject(myObject);
console.log(myObject); // Saída: { a: 1 }

Dentro de reassignObject, obj aponta para um objeto diferente; o myObject original permanece inalterado.

Reconciliando Passagem por Valor e Passagem por Referência em JavaScript

A passagem de parâmetros em JavaScript não é estritamente uma ou outra. É um sistema dependente do contexto:

  • Tipos Primitivos: Passagem por valor. Uma cópia do valor é passada; mudanças internas não afetam o original.
  • Objetos: Passagem por referência. Uma referência ao objeto é passada; mudanças nas propriedades do objeto afetam o original. Atribuir o parâmetro a um novo objeto dentro da função deixa o original intocado.

Dominar essa distinção é crucial para escrever código JavaScript robusto e previsível. O comportamento depende inteiramente se você está trabalhando com primitivos ou objetos.

Deixe um comentário

O seu endereço de email não será publicado. Campos obrigatórios marcados com *