From 33058f2b292b3a581333bdfb21b8f671898c5060 Mon Sep 17 00:00:00 2001 From: Peter Bengtsson Date: Tue, 8 Dec 2020 14:40:17 -0500 Subject: initial commit --- files/zh-cn/glossary/call_stack/index.html | 81 ++++++++++++++++++++++++++++++ 1 file changed, 81 insertions(+) create mode 100644 files/zh-cn/glossary/call_stack/index.html (limited to 'files/zh-cn/glossary/call_stack/index.html') diff --git a/files/zh-cn/glossary/call_stack/index.html b/files/zh-cn/glossary/call_stack/index.html new file mode 100644 index 0000000000..3618bf4a21 --- /dev/null +++ b/files/zh-cn/glossary/call_stack/index.html @@ -0,0 +1,81 @@ +--- +title: Call stack(调用栈) +slug: Glossary/Call_stack +tags: + - 术语 + - 编程 + - 调用栈 +translation_of: Glossary/Call_stack +--- +

调用栈是解释器(比如浏览器中的 JavaScript 解释器)追踪函数执行流的一种机制。当执行环境中调用了多个{{glossary("function","函数")}}时,通过这种机制,我们能够追踪到哪个函数正在执行,执行的函数体中又调用了哪个函数。

+ + + +
function greeting() {
+   // [1] Some codes here
+   sayHi();
+   // [2] Some codes here
+}
+function sayHi() {
+   return "Hi!";
+}
+
+// 调用 `greeting` 函数
+greeting();
+
+// [3] Some codes here
+
+ +

上面的代码会按照如下流程这样执行:

+ +
    +
  1. 忽略前面所有函数,直到 greeting() 函数被调用。
  2. +
  3. greeting() 添加进调用栈列表。
  4. +
  5. 执行 greeting() 函数体中的所有代码。
    + +
    调用栈列表:
    +- greeting
    +
  6. +
  7. 代码执行到 sayHi() 时,该函数被调用。
  8. +
  9. sayHi() 添加进调用栈列表。
  10. +
  11. 执行 sayHi() 函数体中的代码,直到全部执行完毕。
    + +
    调用栈列表:
    +- sayHi
    +- greeting
    +
    +
  12. +
  13. 返回来继续执行 greeting() 函数体中 sayHi() 后面的代码。
  14. +
  15. 删除调用栈列表中的 sayHi() 函数。
  16. +
  17. greeting() 函数体中的代码全部执行完毕,返回到调用 greeting() 的代码行,继续执行剩下的 JS 代码。
    + +
    调用栈列表:
    +- greeting
    +
  18. +
  19. 删除调用栈列表中的 greeting() 函数。
  20. +
+ +

一开始,我们得到一个空空如也的调用栈。随后,每当有函数被调用都会自动地添加进调用栈,执行完函数体中的代码后,调用栈又会自动地移除这个函数。最后,我们又得到了一个空空如也的调用栈。

+ +

了解更多

+ +

基础知识

+ + + +

+ +

-- cgit v1.2.3-54-g00ecf