Skip to content

var, let ou const?

Published: at 12:00 AMSuggest Changes

Uma (ou duas) das características mais importantes que vieram com ES2015 (ES6) foi a adição de let e const que podem ser usados para declaração de variáveis. Mas, a primeira pergunta que você pode ter é: o que as torna diferentes do nosso velho var? Se você ainda não está claro sobre isso, este artigo é para você.

Vamos primeiro revisar os pontos mais importantes sobre var.

Declarações Var

Estou assumindo que todos sabemos que var é usado para atribuir algum valor a uma variável que pode ser reutilizada mais tarde. O que é importante entender aqui é o escopo onde esse valor será acessível.

Escopo do Var

var são sempre globalmente, função/localmente escopados. Isso significa que qualquer variável declarada com var fora de um bloco de função está disponível para uso em toda a janela. var é escopo de função quando é declarado dentro de uma função. Isso significa que está disponível e pode ser acessado apenas dentro dessa função. Vamos ver um exemplo:

function foo() {
  var x = 0;
}
console.log(x); // ReferenceError: x is not defined

Escopo de bloco

Um bloco é um pedaço de código delimitado por {}. Um bloco vive em chaves. Qualquer coisa dentro de chaves é um bloco. var não é block-scoped, então por exemplo:

var x = 0;
function foo() {
  var x = 1;
}
console.log(x); // 1

x ainda estava no “escopo global” dentro do bloco if. O valor de i foi sobrescrito, o que pode não ter sido a intenção.

Declaração Let

let vem como uma melhoria para declarações var. Resolve o exemplo acima, tornando a variável block-scoped. Assim como var, uma variável declarada com let pode ser atualizada dentro de seu escopo. Diferentemente de var, uma variável let não pode ser re-declarada dentro de seu escopo.

Isso funcionará:

let hello = "Oi, amigo!";
hello = "Oi, irmão!";

Isso retornará um erro:

let hello = "Oi, amigo!";
let hello = "Oi, irmão!";

No entanto, se a mesma variável for definida em diferentes escopos, não haverá erro:

let x = 0;
if (true) {
  let x = 1;
  console.log(x); // 1
}
console.log(x); // 0, sem erro

Declaração Const

Declarações const, como podemos imaginar, são usadas para declarar valores constantes. Como let, declarações const são block-scoped.

Regra geral: declarações const nunca podem ser re-declaradas ou reatribuídas. Então, ambos os trechos abaixo falham:

const hello = "Oi, amigo!";
hello = "Oi, irmão!";
// erro : Assignment to constant variable.
const hello = "Oi, amigo!";
const hello = "Oi, irmão!";
// erro : Identifier 'hello' has already been declared

Espero que essas adições realmente importantes do ES6 estejam um pouco mais claras agora. Discutirei o hoisting de var, let e const em um post futuro. 🤟


Post Anterior
Como desenvolver componentes reutilizáveis utilizando Babel and RollupJS
Próximo Post
Declaração de missão pessoal