このコードは、予想される0から9の代わりに10 10を出力します。これは、閉鎖にIへの参照があり、関数が実行されると10になりました。
function f1(){for(var i = 0; i <10; i ++){settimeout(function(){alert(i);}、1000);}} f1();上記の問題を解決するには、自己実行された匿名関数を使用できます。
function f2(){for(var i = 0; i <10; i ++){(function(e){setimeout(function(){alert(e);}、1000);})(i);}} f2();ここの匿名関数はiをパラメーターとして受け取り、ここではeがiのコピーを持ち、参照は上記の問題を回避するEへの参照です。