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 相关文章推荐
JQuery 风格的HTML文本转义
Jul 01 Javascript
Javascript 模式实例 观察者模式
Oct 24 Javascript
jQuery 页面 Mask实现代码
Jan 09 Javascript
JavaScript中string对象
Jun 12 Javascript
JavaScript中关联原型链属性特性
Feb 13 Javascript
JavaScript 浏览器兼容性总结及常用浏览器兼容性分析
Mar 30 Javascript
JavaScript的ExtJS框架中数面板TreePanel的使用实例解析
May 21 Javascript
BootStrap学习系列之布局组件(下拉,按钮组[toolbar],上拉)
Jan 03 Javascript
element form 校验数组每一项实例代码
Oct 10 Javascript
JavaScript获取当前url路径过程解析
Dec 27 Javascript
解决vue里a标签值解析变量,跳转页面,前面加默认域名端口的问题
Jul 22 Javascript
用webAPI实现图片放大镜效果
Nov 23 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 at(@)符号的用法简介
2009/07/11 PHP
PHP在特殊字符前加斜杠的实现代码
2011/07/17 PHP
php对称加密算法示例
2014/05/07 PHP
PHP获取数组长度或某个值出现次数的方法
2015/02/11 PHP
PHP+jQuery实现即点即改功能示例
2019/02/21 PHP
PHP7 list() 函数修改
2021/03/09 PHP
javascript实现二分查找法实现代码
2007/11/12 Javascript
你未必知道的JavaScript和CSS交互的5种方法
2014/04/02 Javascript
一段非常简单的js判断浏览器的内核
2014/08/17 Javascript
Javascript中innerHTML用法实例分析
2015/01/12 Javascript
jQuery实现点击水纹波动动画
2016/04/10 Javascript
jQuery 自定义下拉框(DropDown)附源码下载
2016/07/22 Javascript
bootstrap daterangepicker汉化以及扩展功能
2017/06/15 Javascript
js数组常用最重要的方法
2018/02/04 Javascript
JS中移除非数字最多保留一位小数
2018/05/09 Javascript
JS 实现分页打印功能
2018/05/16 Javascript
JS eval代码快速解密实例解析
2020/04/23 Javascript
微信小程序之导航滑块视图容器功能的实现代码(简单两步)
2020/06/19 Javascript
HTML元素拖拽功能实现的完整实例
2020/12/04 Javascript
详解flask入门模板引擎
2018/07/18 Python
Django保护敏感信息的方法示例
2019/05/09 Python
使用python制作一个为hex文件增加版本号的脚本实例
2019/06/12 Python
Django Python 获取请求头信息Content-Range的方法
2019/08/06 Python
Python aiohttp百万并发极限测试实例分析
2019/10/26 Python
python中的线程threading.Thread()使用详解
2019/12/17 Python
浅析Python数字类型和字符串类型的内置方法
2019/12/22 Python
纽约家具、家居装饰和地毯店:ABC Carpet & Home
2017/06/21 全球购物
C语言笔试题
2014/09/04 面试题
物流仓储计划书
2014/01/10 职场文书
行政主管职责范本
2014/03/07 职场文书
保险公司晨会主持词
2014/03/22 职场文书
应届生找工作求职信
2014/06/24 职场文书
商铺消防安全责任书
2014/07/29 职场文书
个人租房协议书样本
2014/10/01 职场文书
离婚财产分隔协议书
2014/10/23 职场文书