JS 中的“函数调用栈”

95 阅读1分钟

一、什么是函数调用栈?

1、函数调用

就是执行一个函数,如下

function showName() { // 函数声明
   console.log('xxx')
}                   
showName()      // 函数调用

2、栈

一种数据结构,特点是后进先出

3、函数调用栈

将函数调用以栈的形式存储

 

二、函数调用栈作用是?

大家都知道,函数的执行顺序和它的定义顺序无关

JS是单线程的,JS引擎一次只处理一件事,别的事件要在调用栈中排队等待,他们之间的等待关系是什么样的。直接看一个简单的同步例子

function f2() {
   console.log("fn2");
}
function f1() {
   console.log("fn1");
   f2();
}
console.log("start");
f1();
console.log("end");

每当函数调用,会被JS引擎push到执行栈

函数运行完成,就出栈

用流程图表示上述代码段执行顺序

  image.png

 

 

参考文档

什么是调用栈?执行上下文?

本文省略了执行上下文的概念,详见下文

blog.csdn.net/qq_44767749…

文中只举了同步代码的例子,异步见下文

www.jianshu.com/p/12b9f73c5…