Ce code sort 10 10s au lieu des 0 à 9 attendus, car il y a une référence à I dans la fermeture, puis lorsque la fonction est exécutée, je suis devenu 10
fonction f1 () {for (var i = 0; i <10; i ++) {setTimeout (function () {alert (i);}, 1000);}} f1 ();Pour résoudre les problèmes ci-dessus, vous pouvez utiliser des fonctions anonymes auto-exécutées.
fonction f2 () {for (var i = 0; i <10; i ++) {(function (e) {setTimeout (function () {alert (e);}, 1000);}) (i);}} f2 ();La fonction anonyme prend ici en tant que paramètre, et ici e aura une copie de i, et la référence est une référence à E, ce qui évite les problèmes ci-dessus.