En JavaScript, quelles sont les raisons spécifiques pour lesquelles la création de fonctions dans une boucle peut être un gaspillage de calcul?

En JavaScript, quelles sont les raisons spécifiques pour lesquelles la création de fonctions dans une boucle peut être un gaspillage de calcul?

À la page 39 de JavaScript, Good Parts, Douglas Crockford déclare: "Évitez de créer des fonctions dans une boucle. Cela peut être un gaspillage de calcul". Je ne peux pas sembler comprendre pourquoi la création de fonctions dans une boucle serait plus inutile que l'extérieur.

Parce que vous créez plusieurs objets Function au lieu de réutiliser un seul.

Exemple de création d'une fonction identique …

 for (var i = 0; i < 10; i++) { // v--creating identical function in each iteration. (function(j) { var el = document.createElement('a'); el.onclick = function() { alert(j); }; document.body.appendChild(el); })(i); } 

Exemple de réutilisation d'une fonction nommée …

 for (var i = 0; i < 10; i++) { var el = document.createElement('a'); // ----------v---calling a reusable function el.onclick = createHandler(i); document.body.appendChild(el); } function createHandler(j) { return function() { alert(j); }; } 

Les deux exemples ont le même résultat, mais le second n'exige pas la surcharge de deux fonctions pendant la boucle. Au lieu de cela, il crée le seul gestionnaire.

Créer une fonction peut utiliser beaucoup de ressources. Comme les fonctions sont en fait des objets, le code doit réellement créer un nouvel objet fonctionnel à chaque fois, il ne peut pas simplement le créer une fois, puis le réutiliser.

La création d'une fonction à l'intérieur d'une boucle signifie généralement que vous créerez beaucoup de fonctions plutôt que de créer une seule fonction en dehors de la boucle.

Donc, il s'agit simplement de ne pas faire quelque chose d'intensif en ressources dans une boucle si vous pouvez le faire une fois en dehors de la boucle. En ce qui concerne les fonctions, elles peuvent souvent être créées en dehors de la boucle sans modifier la logique du code.