Scope Chains & Closures – O Escopo – Global



Scope Chains & Closures – O Escopo – Global

0 1


scope-chains-closures-talk

Talk para o 3º Nodeschool Campinas 2015

On Github nubunto / scope-chains-closures-talk

Scope Chains & Closures

Introdução. Apresentação. Comentar sobre as diferenças entre escopos de outras linguagens e JS. Comentar sobre closures. Dificuldades.

O Escopo

  • Diferente das outras linguagens
  • Funções em JS

Global

var nome = 'Pablo Escobar';
function dizerNome() {
	return alert('olá querido leitor');
}
					
O contexto global é a janela do navegador, acessível pelo objeto window.

Local

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.
E se definirmos uma função dentro de uma função?
	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.
Vamos voltar ao último exemplo.
	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".
Scope Chains & Closures Introdução. Apresentação. Comentar sobre as diferenças entre escopos de outras linguagens e JS. Comentar sobre closures. Dificuldades.