Pergunta

Tomando o framework jQuery por exemplo, se você executar um código como este:

$(document).ready(function init() { foo.bar(); });

O rastreamento de pilha que você entrar em Firebug será parecido com este:

init()
anonymous()
anonymous([function(), init(), function(), 4 more...], function(), Object name=args)
anonymous()
anonymous()

Como você pode ver, não é muito legível, porque você tem que clicar em cada função para descobrir o que é. As funções anônimas também mostrar-se como (?)() no profiler, e eles podem levar à " não é possível acessar otimizado fechamento " bug. Parece-me que estas são boas razões para evitá-los. Depois, há o fato de que ECMAScript 5 vai depreciar arguments.callee em seu modo estrito, o que significa que não será possível fazer referência a funções anônimas com ele, tornando-os um pouco menos à prova de futuro.

Por outro lado, o uso de funções nomeados podem levar a repetição, por exemplo:.

var Foo = {
    bar: function bar() {}
}

function Foo() {}

Foo.prototype.bar = function bar() {}

Am I correto em pensar que esta repetição é justificado à luz da conveniência de depuração funções nomeadas fornecem, e que a prevalência de funções anônimas em bons frameworks como jQuery é um descuido?

Foi útil?

Solução 2

Eu encontrei a resposta à minha pergunta neste muito informativo artigo . Em primeiro lugar, verifica-se que eu estava certo sobre funções chamado sendo mais desejável, mas a solução não é tão simples como adicionar identificadores a todas as funções anônimas. A principal razão para isso é JScript implementação de expressões de função de uma forma muito quebrado.

Em segundo lugar, há uma distinção entre as declarações de funções e expressões. Uma função anônima é apenas uma expressão de função com o identificador omitido, e adicionando um identificador (nomeá-lo) não faz disso uma declaração (exceto em JScript, que é por isso que não está funcionando). Isto significa que todas as outras respostas eram off marca.

Outras dicas

Eu concordo existem certas desvantagens de usar métodos anônimos em JavaScript / EMCAScript. No entanto, não se esqueçam como eles devem ser usados. Para forros um simples que você deseja passar para outra função, eles são normalmente excelentes.

Mas para mim funções anônimas são mais legíveis no código fonte, porque eu tenho certeza que eles são utilizados apenas lá.

funções anônimas são muito conveniente. A melhor solução para este problema, em vez de nomear as funções, seria se firebug lhe disse em que linha na qual arquivo a função anônima foi criado.

init()
anonymous() // application.js, line 54
anonymous() // foo.js, line 2

E o rastreamento de pilha é o único lugar onde funções anônimas são um problema imo.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top