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中:表达式和语句的区别[译]
Sep 17 Javascript
Jquery显示和隐藏元素或设为只读(含Ligerui的控件禁用,实例说明介绍)
Jul 09 Javascript
jquery获取当前点击对象的value方法
Feb 28 Javascript
控制台报错object is not a function的解决方法
Aug 24 Javascript
node.js开发中使用Node Supervisor实现监测文件修改并自动重启应用
Nov 04 Javascript
js实现四舍五入完全保留两位小数的方法
Aug 02 Javascript
js关于getImageData跨域问题的解决方法
Oct 14 Javascript
Vue自定义指令介绍(2)
Dec 08 Javascript
AngularJS开发教程之控制器之间的通信方法分析
Dec 25 Javascript
解决VUEX刷新的时候出现数据消失
Jul 03 Javascript
[js高手之路]寄生组合式继承的优势详解
Aug 28 Javascript
es6数据变更同步到视图层的方法
Mar 04 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中使用gettext解决国际化问题的例子(i18n)
2014/06/13 PHP
PHP邮件发送类PHPMailer用法实例详解
2014/09/22 PHP
php获取数据库中数据的实现方法
2017/06/01 PHP
jquery右下角弹出提示框示例代码
2013/10/08 Javascript
javascript 数组操作详解
2015/01/29 Javascript
jquery实现简单合拢与展开网页面板的方法
2015/09/01 Javascript
jQuery ajax调用后台aspx后台文件的两种常见方法(不是ashx)
2016/06/28 Javascript
bootstrap treeview 树形菜单带复选框及级联选择功能
2018/06/08 Javascript
JavaScript 中的 this 工作原理
2018/06/20 Javascript
Vue iview-admin框架二级菜单改为三级菜单的方法
2018/07/03 Javascript
layerUI下的绑定事件实例代码
2018/08/17 Javascript
解决layui调用自定义方法提示未定义的问题
2019/09/14 Javascript
从0到1学习JavaScript编写贪吃蛇游戏
2020/07/28 Javascript
js实现3D粒子酷炫动态旋转特效
2020/09/13 Javascript
[18:32]DOTA2 HEROS教学视频教你分分钟做大人-谜团
2014/06/12 DOTA
[01:59]深扒TI7聊天轮盘语音出处 1
2017/05/11 DOTA
[45:18]完美世界DOTA2联赛循环赛 PXG vs IO 第二场 11.06
2020/11/09 DOTA
python实现端口转发器的方法
2015/03/13 Python
SQLite3中文编码 Python的实现
2017/01/11 Python
Python字符串处理实例详解
2017/05/18 Python
python得到单词模式的示例
2018/10/15 Python
python 同时读取多个文件的例子
2019/07/16 Python
python实现网站用户名密码自动登录功能
2019/08/09 Python
pytorch中tensor张量数据类型的转化方式
2019/12/31 Python
python GUI库图形界面开发之PyQt5动态(可拖动控件大小)布局控件QSplitter详细使用方法与实例
2020/03/06 Python
浅析python 字典嵌套
2020/09/29 Python
CSS3,线性渐变(linear-gradient)的使用总结
2017/01/09 HTML / CSS
给男朋友的道歉信
2014/01/12 职场文书
《再别康桥》教学反思
2014/02/12 职场文书
创建青年文明号材料
2014/05/09 职场文书
岗位说明书怎么写
2014/07/30 职场文书
建设幸福中国演讲稿
2014/09/11 职场文书
工会文体活动总结
2015/05/07 职场文书
教你解决往mysql数据库中存入汉字报错的方法
2021/05/06 MySQL
javascript数组includes、reduce的基本使用
2021/07/02 Javascript
CSS精灵图的原理与使用方法介绍
2022/03/17 HTML / CSS