在xDebug上,它们限制了函数嵌套的次数,嵌套函数有多少缺点?
答案 0 :(得分:2)
是
每次从另一个函数中调用函数时,都会向堆栈添加一个级别。
过去的函数调用尚未返回,因此它们声明的局部变量的内存无法释放;它一直存在,直到整个堆栈被解开。
想象一下,你要从1000个深度调用函数中抛出异常。为了生成堆栈跟踪,它必须向上遍历1,000个函数调用,将它们全部放入异常对象中。
对于递归来说,没有什么可以用深度来做,而不能用一个编写良好的循环来做,并且循环将更具内存效率(因为它不必具有堆栈帧开销)每个函数调用)和时间效率(因为它没有实际执行你删除的函数调用的开销)。
达到递归级别1,000的程序极不可能按预期运行。更可能的是,它陷入了无限递归,并最终耗尽了系统的所有RAM。最好早点杀死它。