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:
varnão respeita o escopo de bloco, apenas o de função. Uma variávelvardeclarada dentro de umifvaza para fora do bloco e te dá surpresas. Por isso hoje usamosleteconst: 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();