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 相关文章推荐
Javascript实现重力弹跳拖拽运动效果示例
Jun 28 Javascript
JavaScript AJAX之惰性载入函数
Aug 27 Javascript
JQuery显示隐藏DIV的方法及代码实例
Apr 16 Javascript
Javascript显示和隐藏ul列表的方法
Jul 15 Javascript
总结Javascript中的隐式类型转换
Aug 24 Javascript
jQuery插件扩展操作入门示例
Jan 16 Javascript
借助node实战JSONP跨域实例
Mar 30 Javascript
浅谈vue+webpack项目调试方法步骤
Sep 11 Javascript
详解create-react-app 自定义 eslint 配置
Jun 07 Javascript
详解vue中组件参数
Jul 09 Javascript
浅谈JavaScript节流和防抖函数
Aug 25 Javascript
JS如何判断对象是否包含某个属性
Aug 29 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
PHP4与PHP3中一个不兼容问题的解决方法
2006/10/09 PHP
php生成二维码的几种方式整理及使用实例
2013/06/03 PHP
php+mysqli批量查询多张表数据的方法
2015/01/29 PHP
php实现读取内存顺序号
2015/03/29 PHP
浅谈PHP中如何实现Hook机制
2017/11/14 PHP
prototype 1.5 & scriptaculous 1.6.1 学习笔记
2006/09/07 Javascript
使用JQuery和CSS模拟超链接的用户单击事件的实现代码
2012/05/23 Javascript
关于extjs4如何获取grid修改后的数据的问题
2013/08/07 Javascript
JS页面延迟执行一些方法(整理)
2013/11/11 Javascript
JQuery Highcharts 动态生成图表的方法
2013/11/15 Javascript
js中的eventType事件及其浏览器支持性介绍
2013/11/29 Javascript
javascript模拟枚举的简单实例
2014/03/06 Javascript
node.js中的fs.link方法使用说明
2014/12/15 Javascript
JavaScript实现把数字转换成中文
2015/06/29 Javascript
用JS中split方法实现彩色文字背景效果实例
2016/08/24 Javascript
AngularJS过滤器filter用法实例分析
2016/11/04 Javascript
vue实现文字横向无缝走马灯组件效果的实例代码
2019/04/09 Javascript
深入解析vue 源码目录及构建过程分析
2019/04/24 Javascript
vue中根据时间戳判断对应的时间(今天 昨天 前天)
2019/12/20 Javascript
linux环境下python中MySQLdb模块的安装方法
2017/06/16 Python
python中字符串内置函数的用法总结
2018/09/13 Python
在Pandas中给多层索引降级的方法
2018/11/16 Python
Python 通过requests实现腾讯新闻抓取爬虫的方法
2019/02/22 Python
python3.6中@property装饰器的使用方法示例
2019/08/17 Python
python中的subprocess.Popen()使用详解
2019/12/25 Python
在pytorch中实现只让指定变量向后传播梯度
2020/02/29 Python
pygame实现弹球游戏
2020/04/14 Python
Bootstrap 学习分享
2012/11/12 HTML / CSS
PHP如何删除一个Cookie值
2012/11/15 面试题
地理科学专业毕业生求职信
2013/10/15 职场文书
工程班组长岗位职责
2013/12/30 职场文书
乡镇干部个人对照检查材料思想汇报(原创篇)
2014/09/28 职场文书
党的群众路线教育实践活动个人整改方案
2014/10/25 职场文书
具结保证书范本
2015/05/11 职场文书
世界十大狙击步枪排行榜
2022/03/20 杂记
javascript中Set、Map、WeakSet、WeakMap区别
2022/12/24 Javascript