首页 > 编程语言 >javascript尾递归优化

javascript尾递归优化

时间:2023-02-27 14:46:49浏览次数:32  
标签:执行 return 函数 递归 javascript inner 上下文 优化 栈帧

JS中的递归

我们来看一个阶乘的代码

function foo( n ){
  if(n <= 1){
    return 1;
  }
  return n * foo( n - 1 );
}

foo(5);  // 120

下面分析一下,代码运行过程中,执行上下文栈是怎么变化的

  1. 这个代码是在全局作用域中执行的,所以在foo函数得到执行之前,上下文栈中就已经被放入了一个全局上下文。之后执行一个函数,生成一个新的执行上下文时,JS引擎都会将新的上下文push到该栈中。如果函数执行完成,JS引擎会将对应的上下文上下文栈中弹出

  2. 一开始执行foo函数的时候,JS引擎会创建foo的执行上下文,将该执行上下文push进上下文栈。然后开始执行foo中的代码。

在这里插入图片描述

现在上下文栈中已经有了两个执行上下文了

  1. 在执行到foo中代码快结束时,return表达式中,又调用了foo函数。所以又会创建一个新的执行上下文。并且JS引擎会把这新的执行上下文push到上下文栈中。

在这里插入图片描述

现在上下文栈中已经有了三个执行上下文了

  1. 开始重复第3步的执行。一直到n<=1,才不会有新的执行上下文产生。

此刻上下文栈中,已经有了6个上下文了(包含了全局上下文)

在这里插入图片描述

设想一下

  1. 如果刚开始调用的时候,传入n的初始值为100,到n<=1时,上下文栈中会有几个上下文。101个。
  2. 如果初始值为1000呢?到n<=1时,会有1001个执行上下文
  3. 也就是说,传入的初始值越大,执行上下文栈中,就会有越多的执行上下文

    标签:执行,return,函数,递归,javascript,inner,上下文,优化,栈帧
    From: https://www.cnblogs.com/hellocoder2029/p/17159607.html

相关文章

  • javascript 高级编程 之 Array 用法总结
    引用类型是一种数据结构,用于将数据和功能联系起来。创建对象的方式:1.new操作符vararray=newArray();2.字面量表示法创建vararray=[];Array检测数组:检测数组......
  • NSGA2多目标优化算法的MATLAB仿真
    1.算法描述       首先将一群具有多个目标的个体(解集,或者说线代里的向量形式)作为父代初始种群,在每一次迭代中,GA操作后合并父代于自带。通过非支配排序,我们将所有个......
  • SQL Server递归查询
    本示例仅适用于SQLServer2005及以上版本1.语法结构语法结构基本上与PostgreSql的一致,不同之处在于with后面直接跟临时表表名,且内部使用"unionall"连接。with临时表名称......
  • Java开发中要避免的坑和一些代码优化技巧
    1:动态SQL遇到的坑,先看下面OGNL表达式的说明。Anyobjectcanbeusedwhereabooleanisrequired.OGNLinterpretsobjectsasbooleanslikethis:Iftheobjecti......
  • 前端性能精进之优化方法论(二)——分析
    在上一节中曾提到过两种性能监控:SYN和RUM,那么对应的也有两种分析:数据分析和实验室分析。数据分析会通过采集上来的性能信息来剖析和定位可能存在的各种问题。......
  • 这6种性能优化,让你的程序飞起来!
    软件设计开发某种意义上是"取"与"舍"的艺术。关于性能方面,就像建筑设计成抗震9度需要额外的成本一样,高性能软件系统也意味着更高的实现成本,有时候与其他质量属性甚至会冲......
  • JavaScript 工厂方法创建对象
    <!DOCTYPEhtml><html> <head> <metacharset="UTF-8"> <title></title> <scripttype="text/javascript"> /* *创建一个对象 */ varobj={......
  • JavaScript 构造函数
    <!DOCTYPEhtml><html> <head> <metacharset="UTF-8"> <title></title> <scripttype="text/javascript"> /* *创建一个构造函数,专门用来创建Person对......
  • JavaScript 立即执行函数
    <!DOCTYPEhtml><html> <head> <metacharset="UTF-8"> <title></title> <scripttype="text/javascript"> //函数对象() /* *立即执行函数 ......
  • JavaScript 枚举对象中的属性
    <!DOCTYPEhtml><html> <head> <metacharset="UTF-8"> <title></title> <scripttype="text/javascript"> varobj={ name:"孙悟空", age:1......