JavaScript支持的最大递归调用次数分析


Posted in Javascript onJune 24, 2014

你对JavaScript引擎能进行多少次递归调用好奇吗?

多少次递归调用

下面的函数可以让你找到答案: (灵感来自Ben Alman的 gist)

function computeMaxCallStackSize() {

    try {

        return 1 + computeMaxCallStackSize();

    } catch (e) {

        // Call stack overflow

        return 1;

    }

}

三个结果:

Node.js: 11034

Firefox: 50994

Chrome: 10402

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

在ECMAScript 6中的尾部调用(Tail call)优化

ES6 有尾部调用优化 :如果一个函数中的最后一步也是一个函数调用,它会被“跳”过,而不是通过子函数调用。这就意味着在ES6(严格模式)下,你只要稍微改一下computeMaxCallStackSize函数,它就可以永远执行下去。

function computeMaxCallStackSize(size) {

    size = size || 1;

    return computeMaxCallStackSize(size + 1);

}

Javascript 相关文章推荐
cnblogs csdn 代码运行框实现代码
Nov 02 Javascript
JSQL 批量图片切换的实现代码
May 05 Javascript
js随机颜色代码的多种实现方式
Apr 23 Javascript
Jquery each方法跳出循环,并获取返回值(实例讲解)
Dec 12 Javascript
原生JS绑定滑轮滚动事件兼容常见浏览器
Jun 30 Javascript
基于jQuery实现的图片切换焦点图整理
Dec 07 Javascript
javascript中数组(Array)对象和字符串(String)对象的常用方法总结
Dec 15 Javascript
基于JavaScript实现图片剪切效果
Mar 07 Javascript
基于vue-resource jsonp跨域问题的解决方法
Feb 03 Javascript
vue element table 表格请求后台排序的方法
Sep 28 Javascript
jQuery实现ajax的嵌套请求案例分析
Feb 16 jQuery
JS实现判断数组是否包含某个元素示例
May 24 Javascript
Node.js中require的工作原理浅析
Jun 24 #Javascript
angularjs实现与服务器交互分享
Jun 24 #Javascript
完美兼容各大浏览器获取HTTP_REFERER方法总结
Jun 24 #Javascript
Javascript学习笔记之 函数篇(二) : this 的工作机制
Jun 24 #Javascript
Javascript学习笔记之 函数篇(一) : 函数声明和函数表达式
Jun 24 #Javascript
Javascript学习笔记之 对象篇(四) : for in 循环
Jun 24 #Javascript
Javascript学习笔记之 对象篇(三) : hasOwnProperty
Jun 24 #Javascript
You might like
搭建自己的PHP MVC框架详解
2017/08/16 PHP
php检查函数必传参数是否存在的实例详解
2017/08/28 PHP
Yii2语言国际化的配置教程
2018/08/19 PHP
jquery 插件之仿“卓越亚马逊”首页弹出菜单效果
2008/12/25 Javascript
Node.js插件的正确编写方式
2014/08/03 Javascript
node.js中的fs.fstat方法使用说明
2014/12/15 Javascript
微信小程序 textarea 详解及简单使用方法
2016/12/05 Javascript
Vue.js 递归组件实现树形菜单(实例分享)
2016/12/21 Javascript
Vue-Router进阶之滚动行为详解
2017/09/13 Javascript
JS和Canvas实现图片的预览压缩和上传功能
2018/03/30 Javascript
Nuxt使用Vuex的方法示例
2019/09/06 Javascript
Python实现115网盘自动下载的方法
2014/09/30 Python
使用Python实现下载网易云音乐的高清MV
2015/03/16 Python
pip安装Python库时遇到的问题及解决方法
2017/11/23 Python
Python中类的初始化特殊方法
2017/12/01 Python
快速解决PyCharm无法引用matplotlib的问题
2018/05/24 Python
python 返回列表中某个值的索引方法
2018/11/07 Python
Django Rest framework之权限的实现示例
2018/12/17 Python
python 使用正则表达式按照多个空格分割字符的实例
2018/12/20 Python
基于Python实现拆分和合并GIF动态图
2019/10/22 Python
解决Keras TensorFlow 混编中 trainable=False设置无效问题
2020/06/28 Python
快速解释如何使用pandas的inplace参数的使用
2020/07/23 Python
用CSS3打造HTML5的Logo(实现代码)
2016/06/16 HTML / CSS
html5中canvas学习笔记2-判断浏览器是否支持canvas
2013/01/06 HTML / CSS
Gap工厂店:Gap Factory
2017/11/02 全球购物
Ibood荷兰:互联网每日最佳在线优惠
2019/02/28 全球购物
技校生自我鉴定
2013/12/08 职场文书
营销总经理岗位职责
2014/02/02 职场文书
环保倡议书300字
2014/05/15 职场文书
咖啡店创业计划书范文
2014/09/15 职场文书
2014第二批党员干部对照“四风”找差距检查材料思想汇报
2014/09/18 职场文书
教师批评与自我批评发言稿
2014/10/15 职场文书
团队执行力培训心得体会
2015/08/15 职场文书
2016年大学校运会广播稿件
2015/12/21 职场文书
小学秋季运动会加油口号及加油稿
2019/08/19 职场文书
如何解决goland,idea全局搜索快捷键失效问题
2022/04/03 Golang