Funções JavaScript/Anonymous
Previous: Functions | Index | Next: Programação baseada em objetos |
Uma função anônima é uma função que foi declarada sem nenhum identificador nomeado para se referir a ela. Como tal, uma função anônima normalmente não é acessível após sua criação inicial.
Definição de função normal:
function hello() { alert('Hello world');}hello();
Definição de função anônima:
var anon = function() { alert('I am anonymous');}anon();
Um uso comum para funções anônimas é como argumentos para outras funções. Outro uso comum é como fechamento, para o qual ver também o capítulo Fechamentos.
Usar como argumento para outras funções:
setTimeout(function() { alert('hello');}, 1000);
Acima, a função anônima é passada para setTimeout, que executará a função em 1000 milissegundos.
Utilizar como fechamento:
(function() { alert('foo');}());
Breakdown das declarações anônimas acima:
- Os parênteses ao redor são um invólucro para a função anônima
- Os parênteses ao redor iniciam uma chamada para a função e podem conter argumentos
Outra forma de escrever o exemplo anterior e obter o mesmo resultado:
(function(message) { alert(message);}('foo'));
Uma representação alternativa dos parênteses acima coloca os aparelhos iniciadores nos aparelhos circundantes e não na função em si, o que causa confusão sobre o porquê dos aparelhos circundantes serem necessários em primeiro lugar.
(function() { // …})();
Alguns até já recorreram a dar nomes depreciativos à técnica dos braquetes trapezoidais, num esforço para encorajar as pessoas a movê-los de volta dentro dos braquetes circundantes para onde iniciam a função, ao invés dos braquetes circundantes.
Uma função anônima pode se referir a si mesma via arguments.callee variável local, útil para funções anônimas recursivas:
// returns the factorial of 10.alert((function(n) { return !(n > 1) ? 1 : arguments.callee(n - 1) * n;})(10));
No entanto, arguments.callee é depreciado em ECMAScript 5 Strict. As questões com argumentos.callee são que torna impossível a recursividade da cauda (um plano futuro para JavaScript), e resulta em um valor diferente deste valor. Ao invés de usar arguments.callee, você pode usar uma expressão de função nomeada:
// returns the factorial of 10.alert( (function factorial(n) { return (n <= 1) ? 1 : factorial(n - 1) * n;})(10) );
Uma expressão de função de seta é similar ao que em outras linguagens de programação é conhecida como lambda, introduzida no ECMAScript 6 em 2015. Ela fornece uma abreviatura para criar funções anônimas.
Exemplos:
- x => x + 1
- >Uma função anônima com um argumento x que retorna x + 1.
- >x => {retorno x + 1}
- As acima, mas com um corpo de função.
- (x, y) => x + y
- Uma função de seta de 2 alvos.
- (x, y) => {retorno x + y}
Links:
- Funções # A_expressão da função de seta, desenvolvedor.mozilla.org
- Funções/Arrow functions, developer.mozilla.org