Javascript setInterval(“时钟()”,50)不同于setInterval(“时钟(),50”)和;
运行代码时,浏览器将显示RangeErrorJavascript setInterval(“时钟()”,50)不同于setInterval(“时钟(),50”)和;,javascript,Javascript,运行代码时,浏览器将显示RangeError function hide() { h -= step; pp.style.height = h + "px"; setTimeout(hide(), 1); } 此代码不会终止,因此它会创建无限多个堆栈,从而导致堆栈溢出 考虑添加一些终止逻辑,如: if (h < 0) { return } 这相当于: setTimeout(function() { hide() }, 1) 问题在于这一行: setTimeo
function hide() {
h -= step;
pp.style.height = h + "px";
setTimeout(hide(), 1);
}
此代码不会终止,因此它会创建无限多个堆栈,从而导致堆栈溢出 考虑添加一些终止逻辑,如:
if (h < 0) { return }
这相当于:
setTimeout(function() { hide() }, 1)
问题在于这一行:
setTimeout(hide(),1);
实际上,您并没有告诉JavaScript在1毫秒内再次调用hide()
,而是立即调用它,只将其返回值传递给setTimeout()
。这会导致无限递归,最终导致堆栈溢出/错误
要解决此问题,您必须使用问题标题中的任一语法:
- 只传递函数名,而不是调用它(这里更好)
- 传递lambda函数
- 或者在将要求值的字符串中传递调用(应该避免IMO或用lambda表达式替换IMO)
set Timeout()
,考虑到您的代码总是很容易及时完成:
// Start the while thing
var handle = setInterval(hide, 1);
// Actual function
function hide()
{
// Do stuff
// End condition
if (done)
clearInterval(handle);
}
米奇麦和四叶神-我确信这是一个重复的东西,但不是相关的问题。问题标题有误导性——它没有反映屏幕截图中显示的代码,这是一个无限递归问题。不要发布图像,发布文本。请参阅。我不理解标题,完整代码(具有
h
和step
vars)未显示。考虑编辑这个问题。虽然我的回答可能会对你有所帮助。问题标题中只有一些不应该与给定代码匹配的附加引号。也许这是这里唯一的不一致之处?虽然这在某些情况下会有所帮助,但它并不能解决实际问题:函数应该在一个时间间隔内调用,但实际上它是一个立即发生的递归调用。
// Start the while thing
var handle = setInterval(hide, 1);
// Actual function
function hide()
{
// Do stuff
// End condition
if (done)
clearInterval(handle);
}