问题描述
我正在学习调用堆栈,我知道它是按照“先进先出”的顺序执行的,但是为什么JS代码按从上到下的顺序执行?不应该首先执行调用堆栈中的最后一个项目(这是要弹出的第一个项目)吗?
解决方法
在不掌握太多技术的情况下,请考虑以下代码,
function squared(value) {
return value * value;
}
function cube(value) {
return squared(value) * value;
}
cube(3);
现在,当调用函数cube
时,很明显,要使函数cube
返回其计算值,应首先计算squared
的值并将其乘以返回值。
这就是为什么总是先执行内部函数然后再执行外部函数的原因,因为外部函数可能取决于内部函数返回的值。
将其转换为堆栈,调用堆栈看起来像
- 初始空堆栈。
| |
--
- 调用函数
cube
时,它会插入堆栈中。
|cube|
----
- 当函数
cube
调用函数squared
时,squared
被插入到堆栈中。
|squared|
| cube |
-------
-
squared
将不再调用任何函数,因此将从堆栈中弹出函数squared
,并执行并将值返回给cube
|cube| //squared()
----
- 函数
cube
从堆栈中弹出,执行并把值返回给调用者。
| | // cube() * returned value from squared()
---
这是一个非常简单的解释,说明为什么堆栈用于函数调用,并且几乎在所有编程语言中都使用
。