Javascript支持的最大递归调用时间分析

您是否好奇您可以对Javascript引擎进行多少次递归调用

有多少递归调用

下面的函数允许你找到答案:(灵感来自Ben Alman的依据)

复制代码代码如下所示:

功能computemaxcallstacksize(){

{试

返回1 + computemaxcallstacksize();

} catch(e){

堆栈溢出调用

返回1;

}

}

三结果:

复制代码代码如下所示:

Node.js:11034

火狐:50994

铬:10402

这些数字代表什么Aleph先生指出,在V8中,递归调用的次数取决于两个量:堆栈的大小和堆栈帧的大小(局部变量保存参数)。你可以通过在computemaxcallstacksize添加一个本地变量验证()-它返回的值低。

尾调用(尾调用)在ECMAscript 6优化



6有尾调用优化:如果在一个函数的最后一步是调用一个函数,它将被跳过,而不是所谓的功能。这意味着在6(严格的模式),如果你改变computemaxcallstacksize点功能,它可以执行永远。

复制代码代码如下所示:

功能computemaxcallstacksize(大小){

尺寸大小| | = 1;

返回computemaxcallstacksize(尺寸1);

}