gpt4 book ai didi

javascript - 异步行为。递归 setTimeout 未完成

转载 作者:行者123 更新时间:2023-11-30 09:22:44 24 4
gpt4 key购买 nike

我不明白为什么我的程序在执行下一行代码之前没有完成递归函数。

console.clear();
var a = 1;

function logA() {
if (a<11) {
console.log(a);
a++;
setTimeout(logA, 100);
}
else {
return;
}
}

logA();
console.log("after set timeout");

样本: https://jsbin.com/moyanudeki/edit?js,console

堆栈中发生了什么?

最佳答案

这里没有递归。 setTimeout,顾名思义,在设定的时间(在本例中为 100 毫秒)到期后安排一个函数异步执行。这不会阻止当前批处理的代码运行。

logA() 将返回,控制台打印 “after set timeout”,然后虚拟机等待 100ms 到期。当发生这种情况时,它会执行 logA(),它会再次自行调度,依此类推。

需要明确的是,将是递归:

console.clear();
var a = 1;

function logA() {
if (a<11) {
console.log(a);
a++;
logA();
}
else {
return;
}
}

logA();
console.log("after recursion");

关于javascript - 异步行为。递归 setTimeout 未完成,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50526513/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com