这个问题在这里已有答案:
我看过类似的问题,但无法让setTimeout
使用forEach
循环,甚至使用索引来增加延迟:
pointArray.forEach(function(p) {
setTimeout(addPt(p, 24, red), pointArray.indexOf(p) * 100000);
});
看到我已经将延迟增加到可测量的ms并且乘以增加的索引 - 我知道索引在我控制台注销时起作用并且它增加到100,因为这是数组长度。
无论我在console.log
的addPt
都在同一时间发生。这有什么不对?
addPt(p, 24, red)
您正在立即调用该方法,而不是为setTimeout提供方法引用。如
setTimeout(addPt, 3000);
但是,由于您提供输入,因此有几种方法可以使用方法引用来完成此操作。
//a
setTimeout(function(){ addPt(p, 24, red); }, 3000);
//b
setTimeout(addPt.bind(addPt, p, 24, red), 3000);
//c as noted by Jonas W
setTimeout(addPt, 3000, p, 24, red);
两者都会将方法引用传递给setTimeout,并在持续时间过后让-it-执行该函数。