我查看了类似的问题,但无法让setTimeout
使用forEach
循环,即使使用索引来增加延迟:
pointArray.forEach(function(p) {
setTimeout(addPt(p, 24, red), pointArray.indexOf(p) * 100000);
});
看到我已经将延迟增加到可测量的ms并且乘以增加的索引 - 我知道索引在我控制台注销时起作用并且它增加到100,因为它是数组长度。
无论我console.log
中的addPt
是否同时发生。这有什么不对?
答案 0 :(得分:1)
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-执行该函数。