Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/82.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
此代码会导致堆栈溢出吗?Javascript setTimeout()_Javascript_Settimeout - Fatal编程技术网

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

此代码会导致堆栈溢出吗?Javascript setTimeout(),javascript,settimeout,Javascript,Settimeout,我有以下代码,我想知道这是否会导致堆栈溢出。我不熟悉setTimeout函数的处理方式及其后果 function func1() { // some logic for the dynamicTimeout setTimeout("func2()", dynamicTimeout); } function func2() { // do something func1(); } setTimeout将函数调度为在延迟后执行,并且“调度器”函数的堆栈不会保留,因

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

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

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

setTimeout
将函数调度为在延迟后执行,并且“调度器”函数的堆栈不会保留,因此不会直接由于
setTimeout
而发生堆栈溢出

通常,许多浏览器都会对以这种方式调度的函数强制执行最小超时(因此,即使您将
0
作为超时传递,或者根本不传递超时,函数也不会立即被调度)。即使不是这样,函数也会被添加到等待操作的队列中,如果执行其他操作,函数也会被延迟


作为旁注,还有一个问题。它获取
eval
'd,这有时是不安全的,通常速度很慢。最好只传递一个函数引用:
setTimeout(func2,dynamicTimeout)

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