gpt4 book ai didi

Javascript:settimeout递归无限堆栈增加?

转载 作者:行者123 更新时间:2023-11-30 08:20:25 25 4
gpt4 key购买 nike

我的目标是使用 HTML/CSS/JS 制作背景图片的幻灯片。我发现的许多解决方案都提倡这样的事情:

my_recursion();

function my_recursion () {
// cycle the Background image ...
setTimeout(my_recursion, 3000);
}

我认为这是糟糕的风格是错误的吗?我希望在例如循环 1000 所有其他 999 个 my_recursion 实例仍然打开/在堆栈上?这不会创建无限堆栈,消耗越来越多的内存吗?

或者是否涉及某种智能,比如“如果一个函数在最后调用自身,第 (n-1) 个函数将被销毁,包括在其中分配的所有变量”?

最佳答案

这不会导致无限的堆栈增加,因为 setTimeout 的工作方式,恕我直言,这不是坏风格。

setTimeout 不保证代码会在给定超时后立即运行。相反,在该超时之后,它将回调推送到“队列”中,当堆栈为空时将处理该队列。所以它只会在 my_recursion 返回并且堆栈为空时运行。

If a function calls itself at the end (...)

my_recursion 不会在任何地方调用自己。它只是将自身作为参数传递给 setTimeout。之后就继续执行,直接返回,出栈。

This presentation explains the stack and the event queue.

关于Javascript:settimeout递归无限堆栈增加?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54443801/

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