setTimeOut不起作用 - 它循环严重

时间:2018-01-30 04:48:05

标签: javascript settimeout behavior

我想做一个重复的函数,检索所选的select值并将其发送给变量

 function choosepr(){
var a = document.getElementById("projects");
var b = a.options[a.selectedIndex].value;   // get value from select

projectimg(b);
projectbutton(b);
projectdesc(b);

setTimeout(choosepr(),200);   //repeat function after 200ms
}

变量“b”取正确值并且函数正确接收并执行,问题在于setTimeout,因为激活此函数后它不会以200 ms的频率循环,它只会暂停计算机一段时间并停止执行它。

如何修复它并做好循环?

完整HTML:https://pastebin.com/WVXQrFSf 完全JS:https://pastebin.com/AAW6wZCt

2 个答案:

答案 0 :(得分:3)

最好不要使用setTimeout方法,而是使用setInterval方法。这种方法比setTimeout方法更准确,因为setTimeout等待200ms,运行该函数然后设置另一个超时。所以等待时间实际上超过200毫秒(如果你的函数需要很长时间才能执行,那么等待时间会更长)。

虽然有人可能认为setInterval将每200毫秒执行一次,但重要的是要注意setInterval也会延迟,因为JavaScript不是多线程语言,这意味着 - 如果脚本的其他部分正在运行 - 间隔必须等待完成。

尝试使用setInterval调用此方法。

function choosepr(){
var a = document.getElementById("projects");
var b = a.options[a.selectedIndex].value;   // get value from select

projectimg(b);
projectbutton(b);
projectdesc(b);
}

setInterval(choosepr, 200);

答案 1 :(得分:1)

您需要从choosepr中移除括号,因为您不应该调用该函数而应将其传递给setTimeout

setTimeout(choosepr,200);   

更好的解决方案是使用setInterval

function choosepr()
{
        var a = document.getElementById("projects");
        var b = a.options[a.selectedIndex].value;  
        projectimg(b);
        projectbutton(b);
        projectdesc(b);
}

setInterval(choosepr , 200);