gpt4 book ai didi

javascript - 为什么setTimeout调用的函数没有调用栈限制?

转载 作者:搜寻专家 更新时间:2023-11-01 05:22:58 24 4
gpt4 key购买 nike

timer =  window.setTimeout(function () {
//do something
window.setTimeout(arguments.callee, 1000);
}, 1000);

结果是这些代码运行良好。

但为什么不会导致下面的错误?

Maximum Call Stack Size Exceeded

调试时发现变量作用域不包括之前执行的“setTimeout函数”的作用域

谁能解释一下?

最好有文档。

最佳答案

setTimeout 是异步的(它在执行回调之前返回),回调将在一个新的空堆栈帧上执行。这就是整个目的。它永远不会溢出堆栈。

这不是递归调用,需要保留其作用域(在非 tail-call 优化函数的情况下)。但这也意味着函数变成了阻塞,这不是您想要的。

关于javascript - 为什么setTimeout调用的函数没有调用栈限制?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24631041/

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