私はアイテムの可変リストを与えられた複数のタイマーを実行しようとしています。コードは次のようなものになります。forループ内でsetInterval関数を使用する方法
var list = Array(...);
for(var x in list){
setInterval(function(){
list[x] += 10;
console.log(x + "=>" + list[x] + "\n");
}, 5 * 1000);
}
を上記のコードの問題は、更新されている唯一の値は、リスト内の項目の数を乗じ、リストの末尾のアイテムであるということです。
誰も解決策といくつかの説明を提供できるので、なぜこのように動作するのか知っていますか?
はい、この記事(http://blog.morrisjohns.com/javascript_closures_for_dummies)を読むことをおすすめします。それに加えて、ループ内のsetTimeoutは、コールバックのすべてが同時に起動されるので、彼が何とかしたいとは思っていないかもしれません、それらはずらされません。 – SoWeLie
OPは「閉鎖が必要」ではありません。反対に、回避する必要のある* x *へのクロージャがあります(これは実際には行います)。それは閉鎖を* list *に保ちます。 – RobG