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 相关文章推荐
网站被黑的假象--ARP欺骗之页面中加入一段js
May 16 Javascript
判断iframe是否加载完成的完美方法
Jan 07 Javascript
javascript中字符串拼接需注意的问题
Jul 13 Javascript
通过AJAX的JS、JQuery两种方式解析XML示例介绍
Sep 23 Javascript
实例详解JavaScript获取链接参数的方法
Jan 01 Javascript
jquery 一键复制到剪切板的实例
Sep 20 jQuery
webpack-dev-server自动更新页面方法
Feb 22 Javascript
js中实例与对象的区别讲解
Jan 21 Javascript
使用layui监听器监听select下拉框,事件绑定不成功的解决方法
Sep 28 Javascript
Vue实现多标签选择器
Nov 28 Javascript
javascript 易错知识点实例小结
Apr 25 Javascript
Vue 事件的$event参数=事件的值案例
Jan 29 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实现手机号码中间四位用星号(*)隐藏的自定义函数分享
2014/09/27 PHP
开启PHP Static 关键字之旅模式
2015/11/13 PHP
清华大学出版的事半功倍系列 javascript全部源代码
2007/05/04 Javascript
提高网站性能之 如何对待JavaScript
2009/10/31 Javascript
Jquery ui css framework
2010/06/28 Javascript
页面只有一个text的时候,回车自动submit的解决方法
2010/08/12 Javascript
禁用页面部分JavaScript方法的具体实现
2013/07/31 Javascript
JS的千分位算法实现思路
2013/07/31 Javascript
jQuery UI 实现email输入提示实例
2013/08/15 Javascript
IE中鼠标经过option触发mouseout的解决方法
2015/01/29 Javascript
JQuery控制radio选中和不选中方法总结
2015/04/15 Javascript
jquery日历插件datepicker用法分析
2016/01/22 Javascript
CSS3 3D 技术手把手教你玩转
2016/09/02 Javascript
Web开发中客户端的跳转与服务器端的跳转的区别
2017/03/05 Javascript
Vue导出json数据到Excel电子表格的示例
2017/12/04 Javascript
分析JS中this引发的bug
2017/12/12 Javascript
Vue 创建组件的两种方法小结(必看)
2018/02/23 Javascript
vue 2.x 中axios 封装的get 和post方法
2018/02/28 Javascript
JS简单生成由字母数字组合随机字符串示例
2018/05/25 Javascript
解析vue data不可以使用箭头函数问题
2018/07/03 Javascript
小程序图片剪裁加旋转的示例代码
2018/07/10 Javascript
如何手写一个简易的 Vuex
2020/10/10 Javascript
[02:43]DOTA2亚洲邀请赛场馆攻略——带你走进东方体育中心
2018/03/19 DOTA
Python内置函数bin() oct()等实现进制转换
2012/12/30 Python
Windows系统配置python脚本开机启动的3种方法分享
2015/03/10 Python
Python使用defaultdict读取文件各列的方法
2017/05/11 Python
python获取微信企业号打卡数据并生成windows计划任务
2019/04/30 Python
使用django和vue进行数据交互的方法步骤
2019/11/11 Python
用python的turtle模块实现给女票画个小心心
2019/11/23 Python
解决python DataFrame 打印结果不换行问题
2020/04/09 Python
python opencv把一张图片嵌入(叠加)到另一张图片上的实现代码
2020/06/11 Python
css3 column实现卡片瀑布流布局的示例代码
2018/06/22 HTML / CSS
阿拉伯世界最大的电子卖场:Souq埃及
2016/08/01 全球购物
如何开发一个JQuery插件
2016/07/28 面试题
《鲸》教学反思
2016/02/23 职场文书
2019消防宣传标语!
2019/07/10 职场文书