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