为什么JavaScript代码会出现栈溢出

var a = 2
        function add(b, c) {
            console.trace() 
            return b + c
        }
        function addAll(b, c) {
            var d = 10
            result = add(b, c)
            return a + result + d
        }
        addAll(3, 6)

我们进行分析上面代码在栈是时候是如何进行执行的

  1. 从图中你也可以看出,变量a、函数add和addAll都保存到了全局上下文的变量环境对象中。全局执行上下文压入到调用栈后,JavaScript引擎便开始执行全局代码了
  2. 执行到 a 然后赋值a = 2, 开始执行 addAll 代码 创建addALL上下文 压入栈中,然后在进行执行 d = 10 ,执行到result 的时候 开始执行 add 函数 并创建上下文 压入调用栈中 并执行内部代码 返回9 把add的调用栈从栈中弹出,然后开始执行 allAll 调用栈并得出结果返回,并弹出栈, 这个时候栈全部结束 代码执行完成。

每调用一个函数,JavaScript引擎会为其创建执行上下文,并把该执行上下文压入调用栈,然后JavaScript引擎开始执行函数代码。
如果在一个函数A中调用了另外一个函数B,那么JavaScript引擎会为B函数创建执行上下文,并将B函数的执行上下文压入栈顶。
当前函数执行完毕后,JavaScript引擎会将该函数的执行上下文弹出栈。
当分配的调用栈空间被占满时,会引发“堆栈溢出”问题。
栈是一种非常重要的数据结构,不光应用在JavaScript语言中,其他的编程语言,如C/C++、Java、Python等语言,在执行过程中也都使用了栈来管理函数之间的调用关系。所以栈是非常基础且重要的知识点,你必须得掌握。
为什么JavaScript代码会出现栈溢出

  fucntion add (a,b) {
    add(a,b)
    returen a + b ;
  }
  add(1,2)

1.上面代码的代码为什么会栈溢出, 是因为他是递归调用这个函数,他一直执行这个函数,然后他一直把函数压入栈中,栈是有最大值的,如果超出了栈最大值,就会出现栈溢出的问题。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 本文基于win-xp-SP3,实际内存地址与环境有差异,需按实际调试结果为准。 基础概念 VA = Image B...
    十八砖阅读 857评论 0 0
  • 转载,详见原文:https://blog.csdn.net/aemperor/article/details/47...
    andy_shx阅读 1,663评论 0 0
  • ”Pwn”是一个黑客语法的俚语词 ,是指攻破设备或者系统 。发音类似“砰”,对黑客而言,这就是成功实施黑客攻击的声...
    charlie_heng阅读 21,991评论 3 19
  • 译者注:本文源自《[细节剖析]X Windows中一个22年的漏洞》中提到的一篇文章,即如何溢出有保护机制的lin...
    Letcos阅读 911评论 0 0
  • 今天感恩节哎,感谢一直在我身边的亲朋好友。感恩相遇!感恩不离不弃。 中午开了第一次的党会,身份的转变要...
    余生动听阅读 10,905评论 0 11

友情链接更多精彩内容