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 相关文章推荐
给Function做的OOP扩展
May 07 Javascript
详解jquery uploadify 上传文件
Nov 09 Javascript
JavaScript中的函数重载深入理解
Aug 04 Javascript
JavaScript运动减速效果实例分析
Aug 04 Javascript
JavaScript使用encodeURI()和decodeURI()获取字符串值的方法
Aug 04 Javascript
jQuery Validate插件实现表单强大的验证功能
Dec 18 Javascript
Bootstrap3.0学习教程之JS折叠插件
May 27 Javascript
浅谈js的url解析函数封装
Jun 28 Javascript
jQuery使用siblings获取某元素所有同辈(兄弟姐妹)元素用法示例
Jan 30 Javascript
利用CDN加速react webpack打包后的文件详解
Feb 22 Javascript
解决layui的使用以及针对select、radio等表单组件不显示的问题
Sep 05 Javascript
简单了解JS打开url的方法
Feb 21 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类
2006/07/15 PHP
Windows下XDebug 手工配置与使用说明
2010/07/11 PHP
php中require和require_once的区别说明
2014/02/27 PHP
PHP缓存机制Output Control详解
2014/07/14 PHP
Yii框架引用插件和ckeditor中body与P标签去除的方法
2017/01/19 PHP
在页面上点击任一链接时触发一个事件的代码
2007/04/07 Javascript
jQuery 判断页面元素是否存在的代码
2009/08/14 Javascript
jQuery EasyUI API 中文文档 可调整尺寸
2011/09/29 Javascript
js中的setInterval和setTimeout使用实例
2014/05/09 Javascript
jQuery插件实现带圆点的焦点图片轮播切换
2016/01/18 Javascript
jQuery操作动态生成的内容的方法
2016/05/28 Javascript
jquery基本选择器匹配多个元素的实现方法
2016/09/05 Javascript
js 判断数据类型的几种方法
2017/01/13 Javascript
BootStrap fileinput.js文件上传组件实例代码
2017/02/20 Javascript
JS闭包用法实例分析
2017/03/27 Javascript
详解vue2.0 使用动态组件实现 Tab 标签页切换效果(vue-cli)
2017/08/30 Javascript
实例分析编写vue组件方法
2019/02/12 Javascript
Vue路由切换页面不更新问题解决方案
2020/07/10 Javascript
如何利用javascript接收json信息并进行处理
2020/08/06 Javascript
王纯业的Python学习笔记 下载
2007/02/10 Python
Python 自动安装 Rising 杀毒软件
2009/04/24 Python
python并发编程之多进程、多线程、异步和协程详解
2016/10/28 Python
Python使用微信SDK实现的微信支付功能示例
2017/06/30 Python
Python使用win32 COM实现Excel的写入与保存功能示例
2018/05/03 Python
Django配置celery(非djcelery)执行异步任务和定时任务
2018/07/16 Python
python生成lmdb格式的文件实例
2018/11/08 Python
对Python+opencv将图片生成视频的实例详解
2019/01/08 Python
基于Python实现大文件分割和命名脚本过程解析
2019/09/29 Python
python2 对excel表格操作完整示例
2020/02/23 Python
python 基于卡方值分箱算法的实现示例
2020/07/17 Python
Python绘制数码晶体管日期
2021/02/19 Python
新加坡最早生产电动滑板车的制造商之一:FunsToTheFore
2020/09/08 全球购物
安全月宣传标语
2014/10/07 职场文书
2015年社区计生工作总结
2015/04/21 职场文书
用Python爬取某乎手机APP数据
2021/06/15 Python
Redis基本数据类型Set常用操作命令
2022/06/01 Redis