Domanda

Questa è una specie di domanda casuale, ma mi chiedevo perché un callback chiamato peggiorava, per un evento di clic, rispetto a una funzione anonima.

Ecco il link al Jsperf Test ho eseguito Firefox e Chrome su Mac.

Immagino che la mia ipotesi fosse che i callback nominati avrebbero sempre funzionato meglio. Ad esempio, quando si utilizza .each Il callback nominato è leggermente più veloce.

Grazie per il tuo tempo!

Modificare Ho modificato il .each Test jsperf perché (a) non stavo testando quello che intendevo e (b) sono provare imitare di più eventi.

EDIT 2 La mia configurazione del test è stata errata dall'inizio come sottolinea @esailija. Questa domanda è in qualche modo inutile, ma almeno potrebbe aiutare qualcuno con i test JSperf.

È stato utile?

Soluzione

Il JSPerf è rotto perché accumuli i gestori di eventi attraverso i confini del test. In altri wrod, qualunque test sia eseguito per primo sarà il "più veloce".

E l'intera premessa del test è ridicola, non vi è alcuna differenza tra una funzione che ha un nome e una funzione che non ha un nome se tutto il resto è uguale. Vedrai una differenza solo quando si imposta JSPERF in modo errato. Quando ottieni costantemente risultati uguali per loro, sai di averlo impostato correttamente - ma lo sapresti già dal buon senso :)

Altri suggerimenti

La funzione anonima viene passata come argomento, quindi per risolvere il suo riferimento, la catena dell'ambito non raggiunge fino alla funzione genitore che la ha creato - esiste solo come argomento. D'altra parte, per risolvere il riferimento alla funzione denominata, la catena dell'ambito viene seguita fino alla chiusura della funzione principale in cui è stata creata la funzione denominata.

Modificare:Ho provato a dimostrarlo, ma sembra che la funzione anonima non venga effettivamente risolta più velocemente - http://jsperf.com/scope-chain-anonymous-function

Modificare: Se chiami a.off(); Per rimuovere qualsiasi gestore di eventi, la funzione denominata sarà altrettanto veloce o più veloce della risoluzione della funzione anonima.

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