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 相关文章推荐
一段实时更新的时间代码
Jul 07 Javascript
IE6浏览器下resize事件被执行了多次解决方法
Dec 11 Javascript
关于JQuery($.load)事件的用法和分析
Apr 09 Javascript
jQuery中index()的用法分析
Sep 05 Javascript
BootStrap无限级分类(无限极分类封装版)
Aug 26 Javascript
jQuery实现获取元素索引值index的方法
Sep 18 Javascript
javascript 中的继承实例详解
May 05 Javascript
JavaScript实现三级联动菜单实例代码
Jun 26 Javascript
bootstrap paginator分页插件的两种使用方式实例详解
Nov 14 Javascript
详解Vue + Vuex 如何使用 vm.$nextTick
Nov 20 Javascript
vue cli3.0打包上线静态资源找不到路径的解决操作
Aug 03 Javascript
vue 使用class创建和清除水印的示例代码
Dec 25 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 按指定元素值去除数组元素的实现方法
2011/11/04 PHP
PHP中exec函数和shell_exec函数的区别
2014/08/20 PHP
php学习笔记之基础知识
2014/11/08 PHP
Yii使用技巧大汇总
2015/12/29 PHP
全面了解PHP中的全局变量
2016/06/17 PHP
PHP7 弃用功能
2021/03/09 PHP
通过event对象的fromElement属性解决热区设置主实体的一个bug
2008/12/22 Javascript
Prototype Number对象 学习
2009/07/19 Javascript
jquery 常用操作整理 基础入门篇
2009/10/14 Javascript
Javascript脚本实现静态网页加密实例代码
2013/11/05 Javascript
node.js中的buffer.fill方法使用说明
2014/12/14 Javascript
node.js中的fs.lchownSync方法使用说明
2014/12/16 Javascript
jQuery结合HTML5制作的爱心树表白动画
2015/02/01 Javascript
浅谈Javascript数组索引
2015/07/29 Javascript
纯js代码实现未知宽高的元素在指定元素中垂直水平居中显示
2015/09/12 Javascript
jquery拖拽效果完整实例(附demo源码下载)
2016/01/14 Javascript
JavaScript获取图片像素颜色并转换为box-shadow显示
2016/03/11 Javascript
js实现图片淡入淡出切换简易效果
2016/08/22 Javascript
JavaScript使用math.js进行精确计算操作示例
2018/06/19 Javascript
利用JavaScript缓存远程窃取Wi-Fi密码的思路详解
2018/11/05 Javascript
微信小程序自定义tabBar组件开发详解
2020/09/24 Javascript
vue 里面的 $forceUpdate() 强制实例重新渲染操作
2020/09/21 Javascript
[01:00:30]TFT vs VGJ.T Supermajor 败者组 BO3 第一场 6.5
2018/06/06 DOTA
[32:47]完美世界DOTA2联赛 GXR vs IO 第二场 11.07
2020/11/09 DOTA
详解 Python 与文件对象共事的实例
2017/09/11 Python
利用python将图片转换成excel文档格式
2017/12/30 Python
Python 绘制酷炫的三维图步骤详解
2019/07/12 Python
Lookfantastic希腊官网:英国知名美妆购物网站
2018/09/15 全球购物
波兰最大的电商平台:Allegro.pl
2021/02/06 全球购物
信息部岗位职责
2013/11/12 职场文书
产品设计开发计划书
2014/05/07 职场文书
销售求职信范文
2014/05/26 职场文书
关于国庆节的广播稿
2015/08/19 职场文书
2019年图书室自查报告范本
2019/10/12 职场文书
Vue Element-ui表单校验规则实现
2021/07/09 Vue.js
MySQL图形化管理工具Navicat安装步骤
2021/12/04 MySQL