[Javascript] Escopos

Escopo

O que é?

  • Contexto ou lugar onde escrevemos nosso código
  • Sua função é determinar a visibilidade/acessibilidade de objetos, variáveis e funções.

Tipos de escopo

  • Global

    É o contexto que envolve toda a aplicação. Sempre que iniciamos um código Javascript é criado um escopo global e dentro dele podemos criar outros escopos denominados Locais.

  • Local

    São contextos criados durante o desenvolvimento. Antes do ES6, a única maneira de criar novos escopos era através de funções. Porém, após a chegada do ES6, com o uso do let e do const, a criação de escopos locais deixou de ser limitada apenas a funções e passou a ser possível criar o escopo de bloco.

Escopo de bloco

O que é? Qualquer código que esteja envolto de { }. Podendo ser uma estrutura condicional (if / else if / else), de repetição (while / do while / for) e a própria função.

OBS: A única maneira de utilizar o escopo de bloco é utilizando o let e o const.

Exemplos

// Utilizando var em um escopo de bloco
function imprimeNome() {
  if(true) {
    var nome = 'Brendo';
  }
  console.log(nome); // imprime: Brendo
}

imprimeNome();
// Utilizando let ou const em um escopo de bloco
function imprimeNome() {
  if(true) {
    let nome = 'Brendo';
  }
  console.log(nome); // imprime: nome is not defined 
}

imprimeNome();

Vale lembrar que, uma variável de escopo global pode ser acessada dentro do escopo local, já ao contrário não.


function mostrarNome(nome){
  console.log("nome global função", nome) // imprime: nome global função joão
}
mostrarNome(nome)
console.log("nome global", nome) // imprime: nome global joão

function mostrarNomeLocal(){
  let nomeLocal = "Ricardo";

  console.log("nome local", nomeLocal) // imprime: nome local Ricardo
}

mostrarNomeLocal()
console.log(nomeLocal) // erro: nomeLocal is not defined