返回顶部
首页 > 资讯 > 前端开发 > JavaScript >JS中函数调用栈stack size如何计算
  • 352
分享到

JS中函数调用栈stack size如何计算

2024-04-02 19:04:59 352人浏览 泡泡鱼
摘要

小编给大家分享一下js中函数调用栈stack size如何计算,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!1. 计算方法如下的

小编给大家分享一下js中函数调用栈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();
 };
}());

以上是“JS中函数调用栈stack size如何计算”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注编程网JavaScript频道!

--结束END--

本文标题: JS中函数调用栈stack size如何计算

本文链接: https://lsjlt.com/news/78001.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • JS中函数调用栈stack size如何计算
    小编给大家分享一下JS中函数调用栈stack size如何计算,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!1. 计算方法如下的...
    99+
    2024-04-02
  • matlab中size函数如何使用
    在MATLAB中,size函数用于获取矩阵的大小。size函数的使用方法如下:1. 获取矩阵的行数和列数:可以直接使用size函数,...
    99+
    2023-09-21
    matlab
  • Js文件函数中如何调用另一个Js文件函数
    小编给大家分享一下Js文件函数中如何调用另一个Js文件函数,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!我们知道,在html中,...
    99+
    2024-04-02
  • 如何在python中使用size()函数
    这期内容当中小编将会给大家带来有关如何在python中使用size()函数,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。python的数据类型有哪些python的数据类型:1. 数字类型,包括int(整型...
    99+
    2023-06-14
  • js如何实现短函数调用
    这篇文章给大家分享的是有关js如何实现短函数调用的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。 短函数调用我们可以使用三元运算符来实现这类函数。const t...
    99+
    2024-04-02
  • JavaScript如何实现显示函数调用堆栈
    本篇内容介绍了“JavaScript如何实现显示函数调用堆栈”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!Firebug提供了console...
    99+
    2023-07-04
  • Laravel中如何用聚合函数计算总数
    本文小编为大家详细介绍“Laravel中如何用聚合函数计算总数”,内容详细,步骤清晰,细节处理妥当,希望这篇“Laravel中如何用聚合函数计算总数”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。假如有电子邮件订阅...
    99+
    2023-07-05
  • C++ 函数优化详解:如何优化调用栈?
    调用栈是函数调用的堆栈式记录,影响性能的主要因素包括上下文切换开销、栈溢出风险和缓存不命中。优化调用栈的技术包括减少调用深度、使用尾递归优化、使用内联函数、使用局部变量和使用智能指针。 ...
    99+
    2024-05-02
    c++ 函数优化
  • js中回调函数怎么用
    这篇文章主要为大家展示了“js中回调函数怎么用”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“js中回调函数怎么用”这篇文章吧。JS 回调函数详解JS回调函数何为...
    99+
    2024-04-02
  • PHP如何计算数组的交集,用回调函数比较数据
    这篇文章将为大家详细讲解有关PHP如何计算数组的交集,用回调函数比较数据,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。PHP 计算数组交集 前言 计算数组交集是 PHP 中一项常见的操作,需要获取两个或多...
    99+
    2024-04-02
  • 如何使用js计算总价
    这篇文章主要为大家展示了“如何使用js计算总价”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“如何使用js计算总价”这篇文章吧。商品数量,商品价格先建立两个数组;...
    99+
    2024-04-02
  • python如何计算幂函数
    在python中使用pow函数计算幂函数,具体方法如下:pow:pow()函数的作用是用于计算 x 的 n 次幂函数,其中n为整数。pow()函数使用方法:class Solution:def myPow(self, x: float, n...
    99+
    2024-04-02
  • JavaScript中函数调用栈是怎么工作的
    这篇文章将为大家详细讲解有关JavaScript中函数调用栈是怎么工作的,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。合理地处理堆栈信息能使你清除无用的数据, 而只专注于...
    99+
    2024-04-02
  • PHP如何用回调函数比较数据来计算数组的差集
    这篇文章将为大家详细讲解有关PHP如何用回调函数比较数据来计算数组的差集,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。PHP 使用回调函数比较数据来计算数组的差集 引言: 在 PHP 中,需要经常比较两个...
    99+
    2024-04-02
  • JS自定义函数如何声明和调用
    本篇内容主要讲解“JS自定义函数如何声明和调用”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“JS自定义函数如何声明和调用”吧! 函数...
    99+
    2024-04-02
  • javascript中如何调用函数
    这篇文章将为大家详细讲解有关javascript中如何调用函数,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。javascript中调用函数的方法:1、使用“对象.函数名(...
    99+
    2024-04-02
  • 如何利用Pytorch计算三角函数
    目录一、加载库二、sin值计算方法三、cos值计算方法四、tan值计算方法五、arcsin值计算方法六、arccos值计算方法七、arctan值计算方法一、加载库 首先加载torch...
    99+
    2024-04-02
  • js回调函数如何仿360开机
    这篇文章主要介绍js回调函数如何仿360开机,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!具体内容如下<!DOCTYPE html> <html> ...
    99+
    2024-04-02
  • PHP如何用回调函数对键名比较计算数组的差集
    这篇文章将为大家详细讲解有关PHP如何用回调函数对键名比较计算数组的差集,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。利用回调函数对键名比较计算数组差集 前言 数组差集是指从一个数组中移除与另一个数组中存...
    99+
    2024-04-02
  • PHP如何用回调函数比较键名来计算数组的交集
    这篇文章将为大家详细讲解有关PHP如何用回调函数比较键名来计算数组的交集,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。PHP 使用回调函数比较键名计算数组交集 : 为了计算两个数组的交集,即共享相同键名...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作