Atribuições

As atribuições em JavaScript apresentam uma característica diferente.

let a = 10;
let b = a;
a = 20;
console.log(b); // 10

Até aqui, tudo conforme o esperado. Apenas para efeito de comparação, vamos analisar a situação de uma variável que contém uma string, já que em C esse tipo de dado não existe na linguagem.

let a = "palavra";
let b = a;
a = "cafe";
console.log(b); // palavra

Observe que o comportamento para string é o mesmo de uma variável numérica, já que estamos lidando com um tipo primitivo da linguagem.

Lidando com um vetor

A história começa a mudar quando lidamos com vetores. Veja o fragmento de código a seguir:

let a = [1,2,3,4,5];
let b = a;
a = null;
console.log(b); // [1,2,3,4,5]

Logo de cara, você pode estar estranhando a operação let b = a. Em C, não poderíamos ter atribuições envolvendo um vetor inteiro. Em JavaScript, isso é perfeitamente possível. Vamos discutir o porquê?

Primeiro, a saída da operação console.log(b) será [1,2,3,4,5]. A variável a guarda uma referência para o endereço de memória em que está armazenado o arranjo de elementos. Quando procedemos let b = a, estamos copiando o endereço de memória dessa posição. É, nada mais, nada menos, que um ponteiro disfarçado.

Por isso, quando executamos a = null, o arranjo continua existindo na memória, apenas a referenciação de a para essa região de memória é que é apagada.

Agora faz sentido para você um dos motivos pelos quais estudamos ponteiros na disciplina de AED 2?