JS settimeout不起作用? [重复]

问题描述 投票:-2回答:1

这个问题在这里已有答案:

我看过类似的问题,但无法让setTimeout使用forEach循环,甚至使用索引来增加延迟:

pointArray.forEach(function(p) {
    setTimeout(addPt(p, 24, red), pointArray.indexOf(p) * 100000);

});

看到我已经将延迟增加到可测量的ms并且乘以增加的索引 - 我知道索引在我控制台注销时起作用并且它增加到100,因为这是数组长度。

无论我在console.logaddPt都在同一时间发生。这有什么不对?

javascript jquery html settimeout
1个回答
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-执行该函数。

© www.soinside.com 2019 - 2024. All rights reserved.