JavaScript之堆栈溢出

JavaScript之堆栈溢出今天聊一下 JavaScript 中的堆栈溢出一 什么是堆栈溢出 每次执行 JavaScript 代码时 都会分配一定尺寸的栈空间 Windows 系统中为 1M 每次方法调用时都会在栈里储存一定信息 如参数 局部变量 返回值等等 这些信息再少也会占用一定空间 如果存在较多的此类空间 就会超过线程的栈空间了 说白了就是就是不顾堆栈中分配的局部数据块大小 向该数据块写入了过多的数据

今天聊一下JavaScript中的堆栈溢出

一、什么是堆栈溢出?

二、引起的原因是什么?

 function isEven (num) { if (num == 0) return true; if (num == 1) return false; return isEven(Math.abs(num) - 2); } console.log(isEven(00)); //output Uncaught RangeError: Maximum call stack size exceeded

     由于过多的函数调用,导致调用堆栈无法容纳这些调用的返回地址,一般在递归中产生。堆栈溢出很可能由无限递归(Infinite recursion)产生,但也可能仅仅是过多的堆栈层级。

 

三、怎么解决呢

1、使用setTimeout()来解决(推荐)

 function callback(f) { f(); } function foo() { foo(); //执行1000次左右会发生堆栈溢出的错误, //setTimeout(foo, 0); //永远不会堆栈溢出 } foo()

2、使用闭包解决

function isEven(num){ function isEvenInner(num){ if(num === 0){return true;} if(num === 1){return false;} return function(){ return isEvenInner(Math.abs(num)-2); } } function simplify(func,num){ var value=func(num); while(typeof value == 'function'){ value=value(); } return value; } return simplify.bind(null,isEvenInner)(num) } console.log(isEven());//num太大会导致浏览器卡顿

3、使用尾调用(这个方法还不是很了解,想深入了解的朋友可以自寻资料)

 

后续会继续更新~

 

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

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/205144.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月19日 下午6:42
下一篇 2026年3月19日 下午6:42


相关推荐

  • Matlab画图线型、符号及颜色设置

    Matlab画图线型、符号及颜色设置在matlab中线条的属性主要有:Color:颜色LineStyle:线型LineWidth:线宽Marker:标记点的形状MarkerFaceColor:标记点填充颜色MarkerEdgeColor:标记点边缘颜色MarkerSize:标记点大小举例x=[-2*pi:0.01:2*pi];y1=sin(x);y2=cos(x);figure;%打开一个画板%画两条线,返回的是这两条线的句柄,h是一个包含两个句柄的数组h=plo

    2022年5月31日
    44
  • fastJson注解@JSONField 的作用及其效果「建议收藏」

    【基于fastjson】如果你想让一个实体类里面的某些属性不参与转换成为json字符串,那么使用@JSONField就很舒服。废话不多说,我们看代码!!!!如:User实体类,我在age属性上面使用了这个注解@JSONFieldimportcom.alibaba.fastjson.annotation.JSONField;importjava.io.S…

    2022年4月16日
    210
  • Java–重新认识八种基本数据类型,以后入职不给公司大佬挖坑

    Java–重新认识八种基本数据类型,以后入职不给公司大佬挖坑欢迎进来学习的小伙伴 学习背景 相信很多初学 Java 的小伙伴或者已经入行的 xdm 必然了解 Java 的八种基本数据类型 Java 的数据类型主要分为引用数据类型和基本数据类型 引用数据类型就是平时大家说的万物皆对象 Object 而基本数据类型 对应的有八种 大家应该都记得 也可能不知道或者记不全了 哈哈哈 如果你是 Java 初学者 那么当你去面试 Java 初级工程师的时候 面试官可能会比较喜欢问这个问题 主要是想考察小伙伴们对基本数据类型了解多少 写代码时会不会乱用基本数据类型 给公司的大佬们挖坑 哈哈哈

    2026年3月18日
    2
  • linux(1)Mac上传文件到Linux服务器

    linux(1)Mac上传文件到Linux服务器前言我们使用mac时,想让本地文件上传至服务器,该怎么办呢windows系统,我们可以使用xftp或者rz命令,那么mac呢?mac系统,我们可以使用sftp、scp或者rz命令,本文介绍sft

    2022年7月31日
    8
  • PS磨皮滤镜Portraiture2.3简体中文绿色版32b/64b

    PS磨皮滤镜Portraiture2.3简体中文绿色版32b/64b磨皮滤镜Portraiture简单介绍  Portraiture是一款Photoshop的插件,用于人像图片润色,减少了人工选择图像区域的重复劳动。它能智能地对图像中的皮肤材质、头发、眉毛、睫毛等部位进行平滑和减少疵点处理!      Portraiture是极负盛名的专业人像磨皮滤镜,堪称磨皮神镜,仰望土豪器材党的屌丝团必备。算法优秀,不会造成处理后

    2022年7月22日
    15
  • c语言匹配字符串表达式函数_java字符串匹配

    c语言匹配字符串表达式函数_java字符串匹配最近在写一个程序,需要用到字符串匹配,并且返回匹配的字符串,C语言库函数中的strtstr无法满足我的要求,只能自己写了。代码如下//stringmatchfunctionchar*matchString(constchar*buf,constchar*sub){ char*tbuf=buf; char*tsub=sub; inti=0;//tbuf…

    2022年8月21日
    8

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号