Escopo
Como já sabemos, escopo refere-se à região de um programa onde uma variável ou função é acessível e visível. O escopo determina a vida e a acessibilidade das variáveis e funções em diferentes partes do código.
Tipos de escopo
Escopo de função
O escopo de função, também conhecido como escopo léxico, significa que as variáveis declaradas dentro de uma função só podem ser acessadas dentro dessa função. Essas variáveis são locais para a função, e cada chamada de função cria um novo escopo. Por exemplo:
function exemploFuncao() {
var variavelLocal = "Eu sou local para esta função.";
console.log(variavelLocal); // Funciona normalmente
}
exemploFuncao();
console.log(variavelLocal); // Erro: variavelLocal não está definida
Aqui, variavelLocal
é acessível apenas dentro de exemploFuncao
. Tentar acessá-la fora dessa função resulta em um erro, pois ela não existe no escopo global ou em outro escopo local.
Escopo de bloco
O escopo de bloco, introduzido no ES6 (2009) com as palavras-chave let
e const
, restringe o acesso a uma variável ao bloco, instrução ou expressão onde ela é declarada.
Blocos são geralmente definidos por chaves {}
em estruturas como loops, condicionais e outros blocos de código:
function exemploBloco() {
if (true) {
let variavelDeBloco = "Eu sou local para este bloco.";
console.log(variavelDeBloco); // Funciona normalmente
}
console.log(variavelDeBloco); // Erro: variavelDeBloco não está definida
}
exemploBloco();
Comparação
function exemploFuncao() {
if(true){
var variavelLocal = "Eu sou local para esta função.";
console.log(variavelLocal); // Funciona normalmente
}
console.log(variavelLocal); // Funciona normalmente
}
exemploFuncao();
console.log(variavelLocal); // Erro: variavelLocal não está definida
function exemploFuncao() {
if(true){
let variavelDeBloco = "Eu sou local para este bloco.";
console.log(variavelDeBloco); // Funciona normalmente
}
console.log(variavelDeBloco); // Erro: variavelLocal não está definida
}
exemploFuncao();
console.log(variavelDeBloco); // Erro: variavelLocal não está definida