Toutes les fonctions JavaScript se comportent de la même manière qu'ils héritent des environnements variables dans toute l'étendue de la chaîne menant jusqu'à, et y compris, eux-mêmes. Ceci est également vrai pour les deux anonymes et des fonctions nommées.
Cette chaîne de références à l'extérieur des environnements de séjours avec chaque fonction, même si la fonction est passée dans une tout autre portée.
Traditionnellement, cela signifierait que toutes les variables dans toute la chaîne de référence retenus pour eux aussi longtemps que l'intérieur de la fermeture continue d'exister. Bien que dans les navigateurs modernes que de compiler le code, il est probable qu'il y aura une analyse de variables qui sont effectivement référencé, et uniquement ceux-ci seront conservés, permettant à d'autres qui ne sont plus référencés à ordures.
Cependant, il existe d'autres situations où une fonction anonyme est une source de gaspillage.
Voici un bout de code:
for( var i = 0; i < 100; i++ ) {
(function( j ) {
setTimeout( function() { console.log( j ); }, 1000 );
})( i );
}
C'est une situation où une fonction anonyme est un peu plus gourmands que d'une fonction nommée parce que vous êtes à la recréation d'une fonction identique de 100 fois au cours de la boucle quand vous pourriez réutiliser un nommé un.
function setConsole( j ) {
setTimeout( function() { console.log( j ); }, 1000 );
}
for( var i = 0; i < 100; i++ ) {
setConsole( i );
}
C'est exactement la même fermeture des frais généraux, mais il est plus efficace parce que vous avez construit une fonction pour créer chaque nouvelle variable d'environnement.
http://jsperf.com/immediate-vs-named (Merci à @Felix Kling pour la jsPerf.)
Donc, à l'égard de la fermeture en particulier, oui, il ya surcharge de tant que vous maintenez la fermeture par certains de référence permanent. Je dirais qu'il est bon d'éviter cette situation, si possible, mais de ne pas être obsédé à ce sujet. Parfois, une nouvelle variable d'environnement ajoutées à la portée de la chaîne est tout simplement la meilleure solution.
EDIT: Voici un article à partir de Google. Plus précisément, voir en Évitant les pièges avec des fermetures. pour plus d'informations sur l'impact sur les performances de l'extension de la portée de la chaîne, et pour prétendre que les fonctions anonymes sont "lents" que les fonctions nommées.