此代码会导致堆栈溢出吗?Javascript setTimeout()
我有以下代码,我想知道这是否会导致堆栈溢出。我不熟悉setTimeout函数的处理方式及其后果此代码会导致堆栈溢出吗?Javascript setTimeout(),javascript,settimeout,Javascript,Settimeout,我有以下代码,我想知道这是否会导致堆栈溢出。我不熟悉setTimeout函数的处理方式及其后果 function func1() { // some logic for the dynamicTimeout setTimeout("func2()", dynamicTimeout); } function func2() { // do something func1(); } setTimeout将函数调度为在延迟后执行,并且“调度器”函数的堆栈不会保留,因
function func1() {
// some logic for the dynamicTimeout
setTimeout("func2()", dynamicTimeout);
}
function func2() {
// do something
func1();
}
setTimeout
将函数调度为在延迟后执行,并且“调度器”函数的堆栈不会保留,因此不会直接由于setTimeout
而发生堆栈溢出
通常,许多浏览器都会对以这种方式调度的函数强制执行最小超时(因此,即使您将0
作为超时传递,或者根本不传递超时,函数也不会立即被调度)。即使不是这样,函数也会被添加到等待操作的队列中,如果执行其他操作,函数也会被延迟
作为旁注,还有一个问题。它获取
eval
'd,这有时是不安全的,通常速度很慢。最好只传递一个函数引用:setTimeout(func2,dynamicTimeout)
不,它不会。但话说回来,这不是你真正的代码。您正在创建一个循环,与任何循环一样,您需要注意不要消耗太多内存。