【问题标题】:Javascript's call stacks and execute orderJavascript的调用栈和执行顺序
【发布时间】:2020-12-25 14:35:58
【问题描述】:

我正在学习调用堆栈,我知道它是“先进后出”的顺序,但为什么 JS 代码是按从上到下的顺序执行的?调用堆栈中的最后一项(即要弹出的第一项)不应该先执行吗?

【问题讨论】:

  • 执行代码时,哪种语言不是从上到下顺序执行的?关于堆栈,您应该首先查看基本数据结构。
  • 这个很棒的工具将演示调用堆栈的工作原理:latentflip.com/loupe/…

标签: javascript stack call


【解决方案1】:

不用太技术化,想想下面的代码,

function squared(value) {
  return value * value;
}

function cube(value) {
  return squared(value) * value;
}

cube(3);

现在,当函数cube被调用时,很明显,函数cube要返回它的计算值,它应该首先计算squared的值,然后乘以返回值。

这就是为什么总是先执行内部函数然后执行外部函数的原因,因为外部函数可能依赖于内部函数返回的值。

将其转换为堆栈,调用堆栈如下所示

  1. 初始空堆栈。
 |  |
  --
  1. 当函数cube被调用时,它被插入到堆栈中。
|cube|
 ----
  1. 当函数cube调用函数squared时,squared被插入到堆栈中。
|squared|
| cube  |
 -------
  1. squared 不再调用任何函数,所以函数squared 从堆栈中弹出,执行并将值返回给cube
|cube| //squared()
 ----
  1. 函数cube从堆栈中弹出,执行并将值返回给调用者。
|   | // cube() * returned value from squared()
 ---

这非常简单地解释了为什么堆栈用于函数调用并且几乎用于所有编程语言。

【讨论】:

  • 乐于助人.. :)
猜你喜欢
  • 2020-12-25
  • 2021-08-11
  • 2012-11-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多