【发布时间】:2019-06-23 22:09:53
【问题描述】:
我的目标是使用 HTML/CSS/JS 制作背景图片的幻灯片。我发现的许多解决方案都在宣传这样的内容:
my_recursion();
function my_recursion () {
// cycle the Background image ...
setTimeout(my_recursion, 3000);
}
我认为这是不好的风格是错误的吗?我希望在例如循环 1000 my_recursion 的所有其他 999 个实例仍然打开/在堆栈上?这不是创建无限堆栈,消耗越来越多的内存吗?
或者是否涉及某种智能,例如“如果一个函数最后调用自己,则第 (n-1) 个函数被销毁,包括在其中分配的所有变量”?
【问题讨论】:
-
堆栈上只有一个
my_recursion条目。第一次执行在第二次启动之前完全完成。 -
但是为什么呢?这是否意味着在我的
setTimeout之后的var x = 1永远不会被执行? -
@Robert 对
setTimeout()的调用立即返回。系统会跟踪挂起的定时器,并在时间到来时调用回调函数。 -
@Robert 不,这是不可能的。我敦促您查看我链接的另一个问题,并可能更多地查看事件队列。如果您的函数在 3 秒内仍在运行,那么 不会运行其他任何东西。只有当它完成时,任何其他计划的代码才会运行 - 你不会得到两个并行执行。
标签: javascript recursion slideshow