我需要这段代码迭代大约10秒(或无限期更好),而不会导致javascript最大堆栈大小。我已经注释了setInterval,因为它导致了问题!
var myToggle = false;
function myFunc () {
setTimeout(function () {
if (myToggle) {
console.log("red");
}
else {
console.log("yellow");
}
myToggle = !myToggle;
}, 500);
// setInterval(myFunc, 10000);
}
myFunc();
答案 0 :(得分:1)
改为调用setInterval。 setTimeout将调用内部函数一次。 setInterval将继续调用,直到您取消。
答案 1 :(得分:0)
这通常是设计不良的标志,但解决方案可能如下:
var myToggle = false;
function myFunc () {
var startTime = new Date()/1;
function wait () {
if (myToggle) {
console.log("red");
} else {
console.log("yellow");
}
myToggle = !myToggle;
if (new Date() < startTime + (10*1000)) { // exit condition
setTimeout(wait, 500);
}
}
wait();
}
myFunc();
仅供参考:除其他外,无限回调会降低浏览器的速度并消耗移动设备上的电量。