[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 doconst
, 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 oconst
.
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