Diferenças entre const, let e var em JavaScript
Em JavaScript, existem três formas de declarar variáveis: const
, let
e var
. Cada uma tem comportamentos distintos em relação a escopo, hoisting e reatribuição. Este guia completo explica as diferenças e quando usar cada uma delas.
1. var (versão ES5 do JavaScript e versões anteriores)
- Escopo de função (não tem escopo de bloco)
- Pode ser redeclarada e reatribuída
- Sofre hoisting (é movida para o topo do escopo)
function exemploVar() {
if (true) {
var x = 10;
}
console.log(x); // 10 (vazamento de escopo)
}
exemploVar();
Problemas com ‘var‘
Vaza do bloco (pode causar bugs)
Permite redeclaração (risco de sobrescrever variáveis)
2. let (versão ES6+ do JavaScript)
- Escopo de bloco (não vaza para fora de
{}
) - Pode ser reatribuída, mas não redeclarada
- Tem hoisting, mas não é inicializada (evita erros)
function exemploLet() {
if (true) {
let y = 20;
console.log(y); // 20
}
console.log(y); // ReferenceError: y is not defined
}
exemploLet();
Quando Usar ‘let‘
Em loops (
for
,while
)Quando o valor precisa ser alterado
3. const (versão ES6+ do JavaScript)
- Escopo de bloco (igual ao
let
) - Não pode ser reatribuída nem redeclarada
- Valor imutável (para tipos primitivos)
- Objetos/arrays podem ter propriedades alteradas
const PI = 3.14;
PI = 3.1415; // TypeError: Assignment to constant variable
// Mas em objetos/arrays:
const pessoa = { nome: "João" };
pessoa.nome = "Maria"; // Funciona!
Quando Usar ‘const‘
Para constantes matemáticas (
PI
,GRAVIDADE
)Em imports (
import const module from 'module'
)Sempre que possível (boa prática moderna)
Comparação Direta
Característica | var | let | const |
---|---|---|---|
Escopo | Função | Bloco | Bloco |
Hoisting | Sim | Sim* | Sim* |
Redeclaração | Sim | Não | Não |
Reatribuição | Sim | Sim | Não |
Uso Moderno | Evitar | Moderado | Preferir |
* Hoisting é um comportamento do JavaScript que move declarações de variáveis e funções para o topo do escopo durante a compilação. Isso permite que essas declarações sejam usadas antes de serem declaradas no código.
Conclusão
const
: Ideal para 90% dos casos (imutabilidade)let
: Use quando precisar reatribuir valoresvar
: Evite (legado, causa bugs)
Adotar const
e let
melhora a legibilidade e reduz erros em JavaScript moderno.