首页 > 解决方案 > Javascript的调用栈和执行顺序

问题描述

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

标签: javascriptstackcall

解决方案


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

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

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

cube(3);

现在,当函数cube被调用时,很明显,要让函数cube返回它的计算值,它应该计算squaredfirst 的值并将返回值相乘。

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

将其转换为堆栈,调用堆栈看起来像

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

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


推荐阅读