【问题标题】:Will this code cause a stack overflow? Javascript setTimeout()这段代码会导致堆栈溢出吗? Javascript setTimeout()
【发布时间】:2014-03-30 10:36:24
【问题描述】:

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

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

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

【问题讨论】:

  • 不,不会。但话又说回来,这不是你真正的代码。您正在创建一个循环,并且与任何循环一样,您需要注意不要消耗太多内存。

标签: javascript settimeout


【解决方案1】:

setTimeout 调度一个函数在延迟后执行,并且“调度器”函数的堆栈没有被保留,所以不会因为setTimeout 而直接发生堆栈溢出。

一般来说,许多浏览器都会对以这种方式调度的函数强制设置最小超时时间(因此,即使您将0 作为超时时间,或者根本不通过,函数也不会立即被调度)。即使不是这种情况,该函数也会被添加到等待操作的队列中,并且如果执行其他操作则会延迟。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-02-08
    • 2010-11-12
    • 1970-01-01
    • 1970-01-01
    • 2014-12-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多