Dieser Code gibt 10 10 anstelle der erwarteten 0 bis 9 aus, da es einen Hinweis auf I im Verschluss gibt, und wenn die Funktion ausgeführt wird, bin ich 10 geworden
Funktion f1 () {für (var i = 0; i <10; i ++) {setTimeout (function () {alert (i);}, 1000);}} f1 ();Um die oben genannten Probleme zu lösen, können Sie selbst ausgeführte anonyme Funktionen verwenden.
Funktion f2 () {für (var i = 0; i <10; i ++) {(Funktion (e) {setTimeout (function () {alert (e);}, 1000);}) (i);}} f2 ();Die anonyme Funktion hier nimmt I als Parameter, und hier wird E eine Kopie von I haben, und die Referenz ist eine Referenz auf E, die die oben genannten Probleme vermeidet.