这段代码会导致堆栈溢出吗? Javascript setTimeout()

时间:2014-03-30 02:16:22

标签: javascript settimeout

我有以下代码,我想知道这是否会导致堆栈溢出。我不熟悉setTimeout函数的处理方式及其后果。

function func1() {
    // some logic for the dynamicTimeout
    setTimeout("func2()", dynamicTimeout);
}

function func2() {
    // do something
    func1();
}

1 个答案:

答案 0 :(得分:3)

setTimeout计划在延迟之后执行的函数,以及"调度程序"函数的堆栈没有被保留,因此setTimeout不会直接发生堆栈溢出。

一般情况下,许多浏览器会对以这种方式安排的功能执行最小超时(因此,即使您在超时时通过0,或者根本没有通过,也无法使用该功能立即安排)。即使不是这种情况,该函数也会被添加到等待操作的队列中,如果执行其他操作,则会被延迟。

作为旁注,有no need to pass a string to setTimeout。得到eval' d,有时不安全且通常很慢。最好只传递函数引用:setTimeout(func2, dynamicTimeout)

相关问题