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 相关文章推荐
Code:loadScript( )加载js的功能函数
Feb 02 Javascript
菜鸟javascript基础整理1
Dec 06 Javascript
仿jQuery的siblings效果的js代码
Aug 09 Javascript
js+html+css实现鼠标移动div实例
Jan 30 Javascript
微信小程序 location API接口详解及实例代码
Oct 12 Javascript
JS前端加密算法示例
Dec 22 Javascript
微信小程序 跳转方式总结
Apr 20 Javascript
JavaScript数组去重的多种方法(四种)
Sep 19 Javascript
JS实现图片居中悬浮效果
Dec 25 Javascript
JavaScript数据结构之栈实例用法
Jan 18 Javascript
js中console在一行内打印字符串和对象的方法
Sep 10 Javascript
vue中div禁止点击事件的实现
Apr 02 Vue.js
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 的ArrayAccess接口 像数组一样来访问你的PHP对象
2010/10/12 PHP
php解决抢购秒杀抽奖等大流量并发入库导致的库存负数的问题
2014/06/19 PHP
php读取flash文件高宽帧数背景颜色的方法
2015/01/06 PHP
php动态生成缩略图并输出显示的方法
2015/04/20 PHP
基于ThinkPHP实现批量删除
2015/12/18 PHP
javascript与CSS复习(《精通javascript》)
2010/06/29 Javascript
基于jsTree的无限级树JSON数据的转换代码
2010/07/27 Javascript
jQuery的写法不同导致的兼容性问题的解决方法
2010/07/29 Javascript
精通Javascript系列之数值计算
2011/06/07 Javascript
一个挺有意思的Javascript小问题说明
2011/09/26 Javascript
js中把JSON字符串转换成JSON对象最好的方法
2014/03/21 Javascript
jquery中push()的用法(数组添加元素)
2014/11/25 Javascript
深入理解JavaScript系列(44):设计模式之桥接模式详解
2015/03/04 Javascript
jQuery计算文本框字数及限制文本框字数的方法
2016/03/01 Javascript
浅谈jquery点击label触发2次的问题
2016/06/12 Javascript
Three.js基础部分学习
2017/01/08 Javascript
three.js中文文档学习之创建场景
2017/11/20 Javascript
VUE接入腾讯验证码功能(滑块验证)备忘
2019/05/07 Javascript
了解JavaScript中let语句
2019/05/30 Javascript
解决微信小程序中的滚动穿透问题
2019/09/16 Javascript
[01:30:55]VG vs Mineski Supermajor 败者组 BO3 第三场 6.6
2018/06/07 DOTA
老生常谈Python序列化和反序列化
2017/06/28 Python
python:print格式化输出到文件的实例
2018/05/14 Python
Python小进度条显示代码
2019/03/05 Python
Python socket非阻塞模块应用示例
2019/09/12 Python
python 3.8.3 安装配置图文教程
2020/05/21 Python
详解pandas apply 并行处理的几种方法
2021/02/24 Python
网络、C以及其他硬件方面的面试题
2016/08/23 面试题
介绍一下grep命令的使用
2012/06/28 面试题
大专毕业生自我评价分享
2013/11/10 职场文书
兰兰过桥教学反思
2014/02/08 职场文书
贯彻学习两会心得体会范文
2014/03/17 职场文书
幼儿园教师的自我评价范文
2014/09/17 职场文书
酒店管理专业毕业生自我鉴定
2014/09/29 职场文书
财务审计整改报告
2014/11/06 职场文书
单独二胎证明
2015/06/24 职场文书