1
mayq0422 2018-08-18 20:44:03 +08:00 via Android 1
能保证最多 30 层就没事。上限几千还是能到的。
另外,以后要是都实现尾递归优化的话,至少尾递归不会栈溢出。不过这个 feature 很迷暂时不要指望…… |
2
e8c47a0d OP @mayq0422 自己无聊用 Chrome 的 console 测试了以下,发现最大到 20184 层,超过就出现 Uncaught RangeError: Maximum call stack size exceeded 的错误。
let i = 0 function f () { if (i < 9e4) (console.log(++i), f()) } f() |
3
iMusic 2018-08-19 00:17:06 +08:00
外面加个 setTimeout 就不会溢栈了
|
5
mdluo 2018-08-19 00:57:19 +08:00 via iPhone 3
call stack 最大深度大概是一两万,不同的环境可能有不同的值。如果数据量过大,可以通过 setTimeout(func, 0)、setImmediate(func)、或者 process.nextTick(func) 等方法把递归的深度从 call stack 转移到 task queue
|
6
liuyanjun0826 2018-08-19 16:21:44 +08:00 via Android
没有上限吧,除非你写入上限代码
|
7
xieranmaya 2018-09-09 19:01:25 +08:00 via Android
可以用下面的代码测出调用栈能达到的最大深度:
c=0 function f(){ c++ f() } try { f() }catch(e){ cobsole.log(c) } 朋友,基础还是要打好啊… |