W3docs

Variáveis JavaScript

Artigo do W3Docs sobre variáveis JavaScript: declaração, uso de var, let e const, escopo e a Zona Morta Temporal (TDZ).

Introdução

Uma variável é um contêiner nomeado para um valor. Em JavaScript você cria variáveis para armazenar dados — o nome de um utilizador, um total acumulado, o resultado de um cálculo — e depois referencia esses dados pelo nome em outra parte do programa.

Este guia cobre tudo o que você precisa para declarar variáveis com confiança: as três palavras-chave (let, const e o mais antigo var), como o escopo determina onde uma variável é visível, o que são hoisting e a Zona Morta Temporal (TDZ) na prática, a diferença entre reatribuir e mutar um const, e as regras de nomeação e convenções seguidas pela comunidade.

Versão curta: use const por padrão, let quando precisar reatribuir, e evite var em código moderno.

Declarando uma Variável

Você declara uma variável com uma palavra-chave seguida de um nome e, opcionalmente, atribui um valor com =:

javascript— editable

JavaScript é dinamicamente tipado: uma variável não tem um tipo fixo, portanto a mesma variável pode conter uma string agora e um número depois. (Veja Tipos de Dados JavaScript para os valores que variáveis podem armazenar.)

Existem três palavras-chave de declaração:

  • const — para valores que não serão reatribuídos (sua escolha padrão).
  • let — para valores que serão reatribuídos.
  • var — a palavra-chave original, mantida por compatibilidade retroativa. Veja O antigo "var".

let, const e var Comparados

Palavra-chaveEscopoReatribuir?Redeclarar no mesmo escopo?Hoisting
constblocoNãoNãoTDZ
letblocoSimNãoTDZ
varfunçãoSimSimHoisted, inicializado como undefined

O exemplo abaixo mostra as diferenças práticas entre let/const com escopo de bloco e var com escopo de função:

javascript— editable

Escopo: Onde Vive uma Variável

O escopo determina onde no seu código uma variável pode ser acessada. Para um tratamento mais aprofundado, veja Escopo de variáveis, closure.

Escopo de Bloco (let e const)

let e const são visíveis apenas dentro do bloco { ... } onde são declarados — um if, um loop ou qualquer par de chaves:

javascript— editable

É por isso que let é a escolha certa para contadores de loop: cada iteração de um loop for tem sua própria vinculação.

Escopo de Função (var)

var ignora blocos. Seu escopo é a função envolvente mais próxima (ou o escopo global se estiver fora de qualquer função), o que é uma fonte comum de bugs:

javascript— editable

Escopo Global

Uma variável declarada fora de qualquer função é global e acessível em todo lugar. Nos navegadores, um var no nível superior se anexa ao objeto global window, enquanto let e const no nível superior têm escopo de script e não o fazem:

javascript— editable

Hoisting e a Zona Morta Temporal

Hoisting significa que as declarações são processadas antes que o código seja executado. As três palavras-chave diferem em como realizam o hoisting.

Uma declaração var é içada e inicializada como undefined, então lê-la antes da linha que a atribui retorna undefined em vez de um erro:

javascript— editable

let e const também são içados, mas não são inicializados. Desde o início do bloco até a linha de declaração, a variável fica na Zona Morta Temporal (TDZ) — acessá-la lança um ReferenceError:

javascript— editable

A TDZ é um recurso, não uma quirk: ela captura o uso acidental antes da declaração que o var esconde silenciosamente.

const: Reatribuição vs. Mutação

const impede a reatribuição da variável — você não pode apontar o nome para um novo valor. Ele não torna o valor em si imutável. Objects e arrays mantidos em um const ainda podem ser alterados:

javascript— editable

Use const para objects e arrays sempre que não reatribuir a vinculação — isso documenta a intenção e previne toda uma classe de bugs. Se você realmente precisar de um object imutável, use Object.freeze().

Regras e Convenções de Nomeação

JavaScript impõe algumas regras rígidas para nomes de variáveis:

  • Os nomes podem conter letras, dígitos, _ (sublinhado) e $ (cifrão).
  • Os nomes não devem começar com um dígito.
  • Os nomes são sensíveis a maiúsculas e minúsculastotal e Total são variáveis diferentes.
  • Palavras-chave reservadas como let, class ou return não podem ser usadas.
  • Espaços não são permitidos.

Além das regras, siga estas convenções para um código legível:

  • Use nomes descritivos: userAge, não x.
  • Use camelCase para variáveis e funções: firstName, itemCount.
  • Use UPPER_SNAKE_CASE para constantes fixas: const MAX_SIZE = 100;.
  • Evite letras únicas, exceto para contadores de loop de curta duração (i, j).
javascript— editable

Resumo

  • Use const por padrão, let quando precisar reatribuir, e evite var em código novo.
  • let e const têm escopo de bloco; var tem escopo de função e vaza para fora dos blocos.
  • let/const ficam na TDZ antes de sua declaração; var é lido como undefined.
  • const bloqueia a reatribuição, não a mutação — o conteúdo de objects e arrays ainda pode mudar.
  • Siga as regras de nomeação (sem dígito inicial, sem palavras-chave, sensível a maiúsculas) e use camelCase.

Para aprofundar, leia O antigo "var" e Escopo de variáveis, closure.

Prática

Prática
Quais das seguintes regras se aplicam à criação de variáveis JavaScript?
Quais das seguintes regras se aplicam à criação de variáveis JavaScript?
Was this page helpful?