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);
}