Ce code génère 10 10 au lieu des 0 à 9 attendus, car la fermeture contient une référence à i, puis i est devenu 10 lorsque la fonction est exécutée
function 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écutables
function f2(){ for(var i = 0; i < 10; i++) { (function(e) { setTimeout(function() { alert(e); }, 1000); })(i); } } f2();
La fonction anonyme ici prend i comme paramètre, et le e ici aura une copie de i, et la référence est une référence à e, ce qui évite le problème ci-dessus