关于JS的函数调用栈stack size的计算方法

本篇文章给大家分享了关于js的函数调用栈stack size的计算方法的相关知识点,有兴趣的朋友参考学习下。

如果你写了一个一直调用自身的死循环,那么恭喜你,很快就可以看到报错:Uncaught RangeError: Maximum call stack size exceeded。那么这个call stack size有多少呢?

1. 计算方法

如下的方法可以为你计算出你使用的JavaScript引擎可以支持多深的调用(由Ben Alman的一段代码获得灵感):

function computeMaxCallStackSize() {    try {      return 1 + computeMaxCallStackSize();    } catch (e) {      // Call stack overflow      return 1;    }  }

登录后复制

运行得到如下三个结果:

Node.js: 11034

Firefox: 50994

Chrome: 10402

这些数字代表了什么呢?Mr.Aleph告诉我在V8,可调用的层数基于两个方面:1. 栈的大小;2. 每一栈帧的大小(用于记录函数参数和局部变量)。你可以在computeMaxCallStackSize声明局部变量来测试,你会发现数字变小。

2. ECMAScript 6中尾递归优化

ECMAScript 6支持尾递归优化:如果一个函数的最后一个操作是函数调用,那么将会用“跳转”而不是“子调用”。也就是说如果你将computeMaxCallStackSize重写成如下形式,在ES6的严格模式下,就会一直运行了。

function computeMaxCallStackSize(size) {    size = size || 1;    return computeMaxCallStackSize(size + 1);  }

登录后复制

3. 亮点评论

Andrei: “ECMAScript 6”版本的代码根本跑不通。虽然size会被更改,但是最终并没有值返回。

回复Andrei: 有趣!你不能用这段代码去计算stack size。在ES6下,这段代码会一直运行,因此不会返回数据。在其它情况下,会返回RangeError。为了使其工作,我把代码重写了一下:

var computeMaxCallStackSize = (function() { return function() {  var size = 0;  function cs() {   try {    size++;    return cs();   } catch(e) {    return size + 1;   }  }  return cs(); };}());

登录后复制

以上就是本文的全部内容,希望对大家的学习有所帮助,更多相关内容请关注PHP中文网!

相关推荐:

jQuery实现获取动态添加的标签对象

微信小程序如何获取javascript 里的数据

如何通过JS判断iframe是否加载完成

以上就是关于JS的函数调用栈stack size的计算方法的详细内容,更多请关注【创想鸟】其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至253000106@qq.com举报,一经查实,本站将立刻删除。

发布者:PHP中文网,转转请注明出处:https://www.chuangxiangniao.com/p/2636413.html

(0)
上一篇 2025年3月7日 05:04:27
下一篇 2025年2月27日 06:08:41

AD推荐 黄金广告位招租... 更多推荐

相关推荐

  • Node.js中Request模块处理HTTP协议请求的使用介绍

    这篇文章主要介绍了node.js中request模块处理http请求的基本使用教程,request也支持oauth的签名请求,很好很强大,需要的朋友可以参考下 这里来介绍一个Node.js的模块——request。有了这个模块,http请求…

    2025年3月7日
    200
  • angularjs到底是什么?angularjs都可以做什么?

    本篇文章主要的向大家介绍了关于angularjs的介绍和作用。希望大家认真阅读,现在就让我们一起来看这篇关于angularjs的介绍和作用的文章吧 首先我们要了解angularjs到底是什么? AngularJs(后面就简称ng了)是一个用…

    编程技术 2025年3月7日
    200
  • js能做什么

    在前端中,JavaScript能实现的有很多,其中就包括数据可视化、移动应用方面、服务端、全平台应用、游戏方面、VR方面、方面,还有一些操作系统等多个领域可以使用JavaScript去实现。 本文操作环境:windows7系统、Dell G…

    2025年3月7日
    200
  • 网页中写js有什么作用

    javascript到底可以做什么呢? 事件可以用于处理表单验证,用户输入,用户行为及浏览器动作:页面加载时触发事件;页面关闭时触发事件;用户点击按钮执行动作;验证用户输入内容的合法性… 2.同时呢,我们也可以使用多种方法来执行 JavaS…

    2025年3月7日
    200
  • vscode运行js文件出现乱码

    错误如图: 解决方法: 如果是中文乱码的话,可以到设置里边把「Auto Guess Encoding」这一项勾起来,如图: (如果不是这个原因,可能是因为没安装 Node.js 和配置 Node.js 环境) 相关文章教程推荐:vscode…

    2025年3月7日
    200
  • 自学 HTML5 要多久

    自学 HTML5 要多久 前端除了HTML5之外还有JavaScript和Css,如果只学习HTML5的话半个月到一个月之间就能学会,但是仅仅HTML5是不够的,还需要学习JavaScript和CSS这些,基础学习一个月也足够了。 Java…

    2025年3月7日
    200
  • 浏览器的事件循环

    前言 浏览器事件循环,基础面试中大部分都会问的,本文讲讲这个知识点。 事件循环机制 事件循环是负责执行代码、收集和处理事件以及执行队列中的子任务的一套机制。 在事件循环机制中,使用的栈数据结构便是执行上下文栈,每当有函数被调用时,便会创建相…

    2025年3月7日
    200
  • js是什么

    js(全称“JavaScript”)是一种具有函数优先的轻量级、解释型或即时编译型的高级编程语言。JavaScript已经被广泛用于Web应用开发,常用来为网页添加各式各样的动态功能,为用户提供更流畅美观的浏览效果。 js简介 (推荐学习:…

    2025年3月7日
    200
  • 网页代码中js和css指的是什么

    网页代码中js指的是javascript,是一种具有函数优先的轻量级,解释型或即时编译型的高级编程语言,常用来为网页添加各式各样的动态功能;而css是指层叠样式表,是一种用来表现HTML或XML等文件样式的计算机语言。 本文操作环境:win…

    2025年3月7日
    200
  • 一起看看ECMAScript和JavaScript的区别

    免费学习推荐:js视频教程 1、ECMAScript的简介 ECMAScript是一种由Ecma国际(前身为欧洲计算机制造商协会,英文名称是European Computer Manufacturers Association)通过ECMA…

    2025年3月7日
    200

发表回复

登录后才能评论