Sobes.tech
Junior

O que é o escopo em JavaScript?

sobes.tech IA

Resposta da IA

O âmbito (Scope) em JavaScript é o contexto no qual as variáveis e funções são definidas e acessíveis.

Simplificando, ele determina onde é possível fazer referência a uma variável ou função no código.

Existem vários tipos de escopo:

  • Escopo global (Global Scope): Variáveis declaradas fora de qualquer função estão no escopo global. Elas podem ser acessadas de qualquer lugar no código.
    // Variável global
    let globalVar = "Sou visível em todo lugar";
    
    function showGlobal() {
      console.log(globalVar); // Disponível dentro da função
    }
    
    showGlobal();
    
  • Escopo local (Local/Function Scope): Variáveis declaradas dentro de uma função estão no escopo local dessa função. Elas só podem ser acessadas dentro dessa função e nas funções aninhadas, mas não de fora.
    function showLocal() {
      // Variável local
      let localVar = "Só me vejo aqui";
      console.log(localVar);
    }
    
    showLocal();
    // console.log(localVar); // Erro: localVar não está definido
    
  • Escopo de bloco (Block Scope): Introduzido no ES6 (ES2015) com let e const. Variáveis declaradas com let ou const dentro de chaves ({}), seja em blocos de código, loops ou condições, têm escopo de bloco. Variáveis declaradas com var não têm escopo de bloco.
    if (true) {
      // Variável com escopo de bloco
      let blockVar = "Visível apenas neste bloco";
      console.log(blockVar);
    }
    
    // console.log(blockVar); // Erro: blockVar não está definido
    
    for (let i = 0; i < 2; i++) {
      // Variável com escopo de bloco no loop
      console.log(i);
    }
    
    // console.log(i); // Erro: i não está definido (se foi usado let)
    

Também é importante entender o conceito de cadeia de escopo (Scope Chain). Quando o JavaScript tenta encontrar o valor de uma variável, ele primeiro verifica no escopo atual. Se não encontrar, passa para o escopo externo (pai), e assim por diante, até o escopo global. Se não for encontrada, ocorre um erro ReferenceError.