我不明白为什么我的程序在执行下一行代码之前没有完成递归函数。
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
堆栈中发生了什么?
最佳答案
首次调用logA()
函数时,将按预期执行if
块。 setTimeout(logA, 100);
首次被调用。
在Javascript中,setTimeout()
异步运行,因此它将在堆栈中等待100ms,然后执行下一个语句console.log("after set timeout");
。从第一次超时开始执行此logA函数后,将触发另一个超时,依此类推。
因此,您的输出符合预期:
1
"after set timeout"
2
3
4
5
6
7
8
9
10