Domanda

Prendendo ad esempio il framework jQuery, se si esegue codice in questo modo:

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

La traccia dello stack che ottieni in Firebug sarà simile a questa:

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

Come puoi vedere, non è molto leggibile, perché devi fare clic su ciascuna funzione per scoprire di cosa si tratta. Le funzioni anonime verrebbero visualizzate anche come (?) () nel profiler e potrebbero portare a " impossibile accedere alla chiusura ottimizzata " bug. Mi sembra che questi siano buoni motivi per evitarli. Quindi c'è il fatto che ECMAScript 5 deprecherà argomenti.callee nella sua modalità rigorosa, il che significa che non sarà possibile fare riferimento a funzioni anonime con esso, rendendole un po 'meno a prova di futuro.

D'altra parte, l'uso delle funzioni con nome può portare alla ripetizione, ad esempio:

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

function Foo() {}

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

Sono corretto nel pensare che questa ripetizione sia giustificata alla luce della convenienza del debugging fornita dalle funzioni e che la prevalenza di funzioni anonime in buoni framework come jQuery è una svista?

È stato utile?

Soluzione 2

Ho trovato la risposta alla mia domanda in questo articolo molto informativo . In primo luogo, risulta che avevo ragione sul fatto che le funzioni con nome fossero più desiderabili, ma la soluzione non è semplice come aggiungere identificatori a tutte le funzioni anonime. Il motivo principale di ciò è che JScript implementa le espressioni di funzioni in modo molto frammentato.

In secondo luogo, esiste una distinzione tra espressioni di funzione ed espressioni. Una funzione anonima è solo un'espressione di funzione con l'identificatore omesso e l'aggiunta di un identificatore (nominandolo) non lo renderebbe un'istruzione (tranne in JScript, motivo per cui è interrotta). Ciò significa che tutte le altre risposte erano fuori contrassegno.

Altri suggerimenti

Sono d'accordo che ci sono alcuni aspetti negativi nell'uso di metodi anonimi in JavaScript / EMCAScript. Tuttavia, non trascurare il modo in cui dovrebbero essere utilizzati. Per le semplici fodere che si desidera passare a un'altra funzione, sono spesso eccellenti.

Ma per me le funzioni anonime sono più leggibili nel codice sorgente, perché sono sicuro che sono utilizzate solo lì.

Le funzioni anonime sono molto convenienti. Una soluzione migliore a questo problema, invece di nominare le funzioni, sarebbe se firebug ti dicesse su quale linea in quale file è stata creata la funzione anonima.

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

E la traccia dello stack è l'unico posto in cui le funzioni anonime rappresentano un problema imo.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top