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 相关文章推荐
jQuery的text()方法用法分析
Dec 20 Javascript
js实现刷新iframe的方法汇总
Apr 27 Javascript
jquery实现的V字形显示效果代码
Oct 27 Javascript
JavaScript设置、获取、清除单值和多值cookie的方法
Nov 17 Javascript
jQuery Select下拉框操作小结(推荐)
Jul 22 Javascript
Javascript中的getter和setter初识
Aug 17 Javascript
JavaScript实现滑动导航栏效果
Aug 30 Javascript
微信小程序MUI导航栏透明渐变功能示例(通过改变rgba的a值实现)
Jan 24 Javascript
webpack项目使用eslint建立代码规范实现
May 16 Javascript
react-native聊天室|RN版聊天App仿微信实例|RN仿微信界面
Nov 12 Javascript
antd多选下拉框一行展示的实现方式
Oct 31 Javascript
手写实现JS中的new
Nov 07 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 curl 获取响应的状态码的方法
2014/01/13 PHP
php面象对象数据库操作类实例
2014/12/02 PHP
PHP从FLV文件获取视频预览图的方法
2015/03/12 PHP
PHP汉字转换拼音的函数代码
2015/12/30 PHP
PHP简单遍历对象示例
2016/09/28 PHP
详谈phpAdmin修改密码后拒绝访问的问题
2017/04/03 PHP
PHP实现微信图片上传到服务器的方法示例
2017/06/29 PHP
Jquery判断IE6等浏览器的代码
2011/04/05 Javascript
深入理解JavaScript系列(25):设计模式之单例模式详解
2015/03/03 Javascript
nodejs读写json文件的简单方法(必看)
2017/03/09 NodeJs
基于js实现复制内容到操作系统粘贴板过程解析
2019/10/11 Javascript
详解vue中在循环中使用@mouseenter 和 @mouseleave事件闪烁问题解决方法
2020/04/07 Javascript
JavaScript实现轮播图特效
2020/04/10 Javascript
Python中使用第三方库xlrd来写入Excel文件示例
2015/04/05 Python
Python中的rfind()方法使用详解
2015/05/19 Python
Python使用struct处理二进制的实例详解
2017/09/11 Python
Python栈算法的实现与简单应用示例
2017/11/01 Python
Python装饰器原理与用法分析
2018/04/30 Python
Python3视频转字符动画的实例代码
2019/08/29 Python
Pytorch 多维数组运算过程的索引处理方式
2019/12/27 Python
Python表达式的优先级详解
2020/02/18 Python
Html5移动端弹幕动画实现示例代码
2018/08/27 HTML / CSS
HTML5 Canvas实现平移/放缩/旋转deom示例(附截图)
2013/07/04 HTML / CSS
提供世界各地便宜的机票:Sky-tours
2016/07/21 全球购物
美国最灵活的移动提供商:Tello
2017/07/18 全球购物
优秀大学生的自我评价
2014/01/16 职场文书
施工员岗位职责
2014/03/16 职场文书
满月酒主持词
2014/03/27 职场文书
励志演讲稿500字
2014/08/21 职场文书
网球场地租赁协议范本
2014/10/07 职场文书
教师群众路线教育实践活动学习笔记
2014/11/05 职场文书
公司表扬稿范文
2015/05/05 职场文书
早会开场白台词大全
2015/06/01 职场文书
赤壁观后感(2)
2015/06/15 职场文书
刚学完怎么用Python实现定时任务,转头就跑去撩妹!
2021/06/05 Python
Python中的变量与常量
2021/11/11 Python