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?