Javascript的调用栈和执行顺序
Javascript's call stacks and execute order
我正在学习调用堆栈,我知道它是按'first in last out'顺序执行的,但为什么 JS 代码按从上到下的顺序执行?调用栈的最后一项(也就是最先弹出的项)不应该先执行吗?
无需太专业,想想下面的代码,
function squared(value) {
return value * value;
}
function cube(value) {
return squared(value) * value;
}
cube(3);
现在,当函数 cube
被调用时,很明显,对于函数 cube
到 return 它的计算值,它应该计算 [=18 的值=] 首先乘以 returned 值。
这就是为什么内部函数总是先执行然后再执行外部函数的原因,因为外部函数可能取决于内部函数return编辑的值。
将其转换为堆栈,调用堆栈如下所示
- 初始空堆栈。
| |
--
- 当函数
cube
被调用时,它被插入堆栈。
|cube|
----
- 当函数
cube
调用函数squared
时,squared
被插入堆栈。
|squared|
| cube |
-------
squared
不再调用任何函数,因此函数 squared
从堆栈中弹出,执行并将值 return 编辑为 cube
|cube| //squared()
----
- 函数
cube
从堆栈中弹出,执行并将值 return 发送给调用程序。
| | // cube() * returned value from squared()
---
这非常简单地解释了为什么堆栈用于函数调用并且在所有编程语言中都广泛使用。
我正在学习调用堆栈,我知道它是按'first in last out'顺序执行的,但为什么 JS 代码按从上到下的顺序执行?调用栈的最后一项(也就是最先弹出的项)不应该先执行吗?
无需太专业,想想下面的代码,
function squared(value) {
return value * value;
}
function cube(value) {
return squared(value) * value;
}
cube(3);
现在,当函数 cube
被调用时,很明显,对于函数 cube
到 return 它的计算值,它应该计算 [=18 的值=] 首先乘以 returned 值。
这就是为什么内部函数总是先执行然后再执行外部函数的原因,因为外部函数可能取决于内部函数return编辑的值。
将其转换为堆栈,调用堆栈如下所示
- 初始空堆栈。
| |
--
- 当函数
cube
被调用时,它被插入堆栈。
|cube|
----
- 当函数
cube
调用函数squared
时,squared
被插入堆栈。
|squared|
| cube |
-------
squared
不再调用任何函数,因此函数squared
从堆栈中弹出,执行并将值 return 编辑为cube
|cube| //squared()
----
- 函数
cube
从堆栈中弹出,执行并将值 return 发送给调用程序。
| | // cube() * returned value from squared()
---
这非常简单地解释了为什么堆栈用于函数调用并且在所有编程语言中都广泛使用。