DevPath · Aprenda a programar ESPTEN

Escopo, hoisting e closures

Escopo: global, local e de bloco

O escopo é "quem pode ver qual variável"

Imagine uma casa. O que você deixa no seu quarto não é visto da cozinha. As variáveis funcionam igual: cada uma vive em um "cômodo" e só é visível de dentro. Esse cômodo a gente chama de escopo (ou scope).

Entender isso te livra do clássico "mas eu declarei essa variável, por que diz que ela não existe?". Spoiler: ela existe, só que em outro cômodo.

Escopo global

Uma variável declarada fora de toda função ou bloco é global: ela é vista de qualquer parte do programa. Prática, mas perigosa se você exagerar: qualquer um pode mexer nela.

const planeta = "Terra"; // global
function mostrar() {
  console.log(planeta); // acessível aqui
}

Escopo local (de função)

As variáveis declaradas dentro de uma função só existem ali:

function calcular() {
  const interna = 42;
  return interna;
}
// console.log(interna); // ❌ Erro: interna não existe fora

Escopo de bloco

Com let e const, cada par de chaves { } (um if, um for...) cria seu próprio mini-cômodo:

if (true) {
  let mensagem = "olá";
  console.log(mensagem); // ✅ "olá"
}
// console.log(mensagem); // ❌ Erro: fora do bloco não existe

⚠️ Pegadinha clássica: var não respeita o escopo de bloco, apenas o de função. Uma variável var declarada dentro de um if vaza para fora do bloco e te dá surpresas. Por isso hoje usamos let e const: eles respeitam o cômodo.

Exemplos

A global é vista de dentro; a local fica trancada na sua função

const global = "sou global";
function demo() {
  const local = "sou local";
  console.log(global); // acessível
  console.log(local);  // acessível
}
demo();
Coloque isto em prática

O DevPath é um curso prático: aqui você lê a teoria; no app você a coloca em prática com exercícios que rodam de verdade, offline.

Comece grátis no app →
Hoisting (içamento) →