Fechamento no ECMAScript
- Página anterior Objeto Function
- Próxima página Orientado a objetos
O ponto mais fácil de ser mal interpretado no ECMAScript é que ele suporta closures (fechamentos).
Closure, que se reflete na representação léxica que inclui variáveis não calculadas, ou seja, a função pode usar variáveis definidas fora da função.
Exemplo simples de closure
O uso de variáveis globais no ECMAScript é um exemplo simples de closure. Pense no seguinte código:
var sMessage = "hello world"; function sayHelloWorld() { alert(sMessage); } sayHelloWorld();
Neste trecho de código, após o script ser carregado na memória, não há cálculo do valor da variável sMessage para a função sayHelloWorld(). A função sayHelloWorld() captura o valor de sMessage apenas para uso futuro, ou seja, o interpretador sabe que deve verificar o valor de sMessage ao chamar a função. sMessage será atribuído no chamada da função sayHelloWorld() (última linha) e exibirá a mensagem "hello world".
Exemplo de closure complexa
Definir outra função dentro de uma função torna o closure mais complexo. Por exemplo:
var iBaseNum = 10; function addNum(iNum1, iNum2) { function doAdd() { return iNum1 + iNum2 + iBaseNum; } return doAdd(); }
Aqui, a função addNum() inclui a função doAdd() (closure). A função interna é um closure porque ela obtém os parâmetros iNum1 e iNum2 da função externa e o valor da variável global iBaseNum. O último passo da função addNum() chama doAdd(), adiciona os dois parâmetros e o valor da variável global, e retorna a soma.
Aqui, o conceito importante a ser compreendido é que a função doAdd() não aceita parâmetros, os valores que ela usa são obtidos do ambiente de execução.
Pode ver que o closure é uma parte muito poderosa e versátil do ECMAScript, usada para executar cálculos complexos.
Dica:Como ao usar qualquer função avançada, usar闭包时要小心,因为它们可能会变得非常复杂。
- Página anterior Objeto Function
- Próxima página Orientado a objetos