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 相关文章推荐
工作需要写的一个js拖拽组件
Jul 28 Javascript
jQuery EasyUI API 中文文档 - DataGrid数据表格
Nov 17 Javascript
jquery库或JS文件在eclipse下报错问题解决方法
Apr 17 Javascript
jQuery中ajax的load()方法用法实例
Dec 26 Javascript
JS制作手机端自适应缩放显示
Jun 11 Javascript
HTML5canvas 绘制一个圆环形的进度表示实例
Dec 16 Javascript
Angular服务Request异步请求的实例讲解
Aug 13 Javascript
React Native开发封装Toast与加载Loading组件示例
Sep 08 Javascript
提升node.js中使用redis的性能遇到的问题及解决方法
Oct 30 Javascript
vue组件实践之可搜索下拉框功能
Nov 25 Javascript
angular 服务随记小结
May 06 Javascript
Vue实现todo应用的示例
Feb 20 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
在Zeus Web Server中安装PHP语言支持
2006/10/09 PHP
不要轻信 PHP_SELF的安全问题
2009/09/05 PHP
PHP 时间日期操作实战
2011/08/26 PHP
php数组函数序列 之shuffle()和array_rand() 随机函数使用介绍
2011/10/29 PHP
浅析PHP中Collection 类的设计
2013/06/21 PHP
php实现mysql数据库操作类分享
2014/02/14 PHP
php遍历删除整个目录及文件的方法
2015/03/13 PHP
基于laravel制作APP接口(API)
2016/03/15 PHP
Laravel 5.5官方推荐的Nginx配置学习教程
2017/10/06 PHP
模拟用户操作Input元素,不会触发相应事件
2007/05/11 Javascript
jquery的ajax提交form表单的两种方法小结(推荐)
2016/05/25 Javascript
JavaScript严格模式下关于this的几种指向详解
2017/07/12 Javascript
基于JavaScript实现无限加载瀑布流
2017/07/21 Javascript
jQuery基于Ajax实现读取XML数据功能示例
2018/05/31 jQuery
JS实现百度网盘任意文件强制下载功能
2018/08/31 Javascript
JavaScript变量基本使用方法实例分析
2019/11/15 Javascript
vue 动态表单开发方法案例详解
2019/12/02 Javascript
Angular单元测试之事件触发的实现
2020/01/20 Javascript
《javascript设计模式》学习笔记三:Javascript面向对象程序设计单例模式原理与实现方法分析
2020/04/07 Javascript
JavaScript代码实现微博批量取消关注功能
2021/02/05 Javascript
[02:06]DOTA2肉山黑名单魔法终结者 敌法师中文配音鉴赏
2013/06/17 DOTA
[03:34]2014DOTA2西雅图国际邀请赛 淘汰赛7月15日TOPPLAY
2014/07/15 DOTA
Python实现从url中提取域名的几种方法
2014/09/26 Python
使用Python编写简单的画图板程序的示例教程
2015/12/08 Python
详解Python的Django框架中manage命令的使用与扩展
2016/04/11 Python
django使用haystack调用Elasticsearch实现索引搜索
2019/07/24 Python
微信小程序python用户认证的实现
2019/07/29 Python
Python实现微信翻译机器人的方法
2019/08/13 Python
Python面向对象中类(class)的简单理解与用法分析
2020/02/21 Python
python+selenium自动化实战携带cookies模拟登陆微博
2021/01/19 Python
黑猩猩商店:The Chimp Store
2020/02/12 全球购物
多媒体编辑专业毕业生推荐信
2013/11/05 职场文书
个人党性剖析材料
2014/02/03 职场文书
个人近期表现材料
2014/02/11 职场文书
《登鹳雀楼》教学反思
2014/04/09 职场文书
使用HTML+Css+transform实现3D导航栏的示例代码
2021/03/31 HTML / CSS