JavaScript Encerramentos

Varáveis JavaScript podem pertencer ao âmbito orglobal local.

Varáveis globais podem ser feitas localmente (privado) com encerramentos.

Variáveis globais

A function pode aceder a todas as variáveis definidas dentro da função, desta forma:

Exemplo

função myFunction() {
var a = 4;
voltar a * a;
}

Try it Yourself ”

But a function também pode aceder a variáveis definidas fora da função, desta forma:

Exemplo

var a = 4;
função myFunction() {
retornar a * a;
}

Try it Yourself ”

No último exemplo, a é uma variável global.

Numa página web, as variáveis globais pertencem ao objecto da janela.

Variáveis globais podem ser usadas (e alteradas) por todos os scripts na página (e na janela).

No primeiro exemplo, a é uma variável local.

Uma variável local só pode ser usada dentro da função onde está definida. Está escondida de outras funções e de outros códigos scripting.

Variáveis globais e locais com o mesmo nome são variáveis diferentes. Modificando uma, não modifica a outra.

Variáveis criadas sem uma palavra-chave de declaração (varlet, ou const) são sempre globais, mesmo que sejam criadas dentro de uma função.

Variável Tempo de Vida

Variáveis globais vivem até a página ser descartada, como quando se navega para outra página ou se fecha a janela.

Variáveis locais têm vidas curtas. São criadas quando a função é invocada, e apagadas quando a função é terminada.

Um Dilema Contador

P>Se quiser usar uma variável para contar algo, e quer que este contador esteja disponível para todas as funções.

P>Pode usar uma variável global, e um function para aumentar o contador:

Exemplo

// Iniciar contador
contadorvar = 0;
// Função para incrementar o contador
função add() {
contador += 1;
}
// Chamar add() 3 vezes
add();
add();
add();
add();
// O contador deve agora ser 3

Try it Yourself ”

Existe um problema com a solução acima: Qualquer código na página pode alterar o contador, sem chamar add().

O contador deve ser local para a função add(), para evitar que outro código o altere:

Exemplo

// Iniciar contador
var contador = 0;
// Função para incrementar contador
função add() {
var contador = 0;
contador += 1;
}
// Chamar add() 3 vezes
add();
add();
add();
add();
add();
/ O contador deve agora ser 3. Mas é 0

Try it Yourself ”

Não funcionou porque mostramos o contador global em vez do contador local.

Podemos remover o contador global e aceder ao contador local, deixando a função devolvê-lo:

Exemplo

// Função para incrementar contador
função add() {
contadorvar = 0;
contador += 1;
contador de retorno;
}
// Chamada add() 3 vezes
add();
add();
add();
add();
/ O contador deve agora ser 3. Mas é 1.

Try it Yourself ”

Não funcionou porque reiniciamos o contador local cada vez que chamamos a função.

Uma função interna JavaScript pode resolver isto.

JavaScript Nested Functions

Todas as funções têm acesso ao âmbito global.

De facto, em JavaScript, todas as funções têm acesso ao âmbito “acima” delas.

JavaScript suporta funções aninhadas. As funções aninhadas têm acesso ao escopo “acima” delas.

Neste exemplo, a função interna plus() tem acesso à variável counter na função principal:

Exemplo

função add() {
contador de var = 0;
função plus() {counter += 1;}
plus();
contador de retorno;
}

Try it Yourself ”

Isso poderia ter resolvido o dilema do contador, se pudéssemos alcançar a função plus() a partir do exterior.

Temos também de encontrar uma forma de executar counter = 0 apenas uma vez.

P>Necessitamos de um fecho.

Encerramentos JavaScript

Lembrar funções auto-invoocadoras? O que é que esta função faz?

Exemplo

var adicionar = (função () {
contador devar = 0;
função de retorno () {contador += 1; contador de retorno}
})();
add();
add();
add();>br>add();
// o contador é agora 3

Try it Yourself ”

Exemplo Explicado

A variável add é atribuída ao valor de retorno de uma função de auto-invocação.

A função de auto-invoque só funciona uma vez. Define o contador para zero (0), e retorna uma expressão de função.

Desta forma, a adição torna-se uma função. A parte “maravilhosa” é que ela pode aceder ao contador no âmbito da função pai.

A isto chama-se um fecho JavaScript. Torna possível que uma função tenha variáveis “privadas”.

O contador é protegido pelo âmbito da função anónima, e só pode ser alterado utilizando a função de adição.

Um fecho é uma função que tem acesso ao âmbito principal, mesmo depois de a função principal ter fechado.

Deixe uma resposta

O seu endereço de email não será publicado. Campos obrigatórios marcados com *