Tôi đang cố gắng chạy nhiều bộ tính giờ cho một danh sách các mục thay đổi. Mã trông giống như sau:Cách sử dụng chức năng setInterval trong vòng lặp
var list = Array(...);
for(var x in list){
setInterval(function(){
list[x] += 10;
console.log(x + "=>" + list[x] + "\n");
}, 5 * 1000);
}
Vấn đề với mã ở trên là giá trị duy nhất được cập nhật là mục ở cuối danh sách, nhân với số mục trong danh sách.
Có ai có thể đưa ra giải pháp và một số giải thích để tôi biết tại sao nó hoạt động theo cách này không?
Có, tôi có thể khuyên bạn nên đọc bài viết này: http://blog.morrisjohns.com/javascript_closures_for_dummies. Trên hết, mặc dù setTimeout trong vòng lặp có thể không phải là những gì anh ta muốn làm dù sao tất cả các cuộc gọi lại sẽ được kích hoạt cùng một lúc, họ sẽ không bị so le. – SoWeLie
OP không "cần đóng cửa", hoàn toàn ngược lại - nó có một đóng cửa để * x * mà cần phải tránh (mà câu trả lời của bạn thực sự không). Nó giữ đóng cửa * danh sách * mặc dù. – RobG