On Github nubunto / scope-chains-closures-talk
var nome = 'Pablo Escobar';
function dizerNome() {
return alert('olá querido leitor');
}
O contexto global é a janela do navegador, acessível pelo objeto window.
function figuraOculta() {
var oculta = 'cachorro';
return alert('Existe uma figura oculta, que é um ' + oculta + ' atras.');
}
alert(atras); // erro
Ao contrário do escopo global, as variáveis dentro de uma função pertencem a função que engloba estas variáveis.
Vale lembrar que em JavaScript, declarações sem var resultam na variável sendo jogada para o escopo global.
function digaNome(nome) {
function capitalizar() {
return nome[0].toUpperCase() + nome.substr(1).toLowerCase();
}
return alert(capitalizar());
}
digaNome("RoBeRTO"); // alerta "Roberto".
// alertarNome() -> erro!
As regras são as mesmas.
function digaNome(nome) {
function capitalizar() {
return nome[0].toUpperCase() + nome.substr(1).toLowerCase();
}
return alert(capitalizar());
}
Mesmo que eu não tenha declarado a variável nome dentro da função alertarNome, consigo usar este valor dentro da função "de dentro".