一、什么是函数调用栈?
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到执行栈
函数运行完成,就出栈
用流程图表示上述代码段执行顺序
参考文档
本文省略了执行上下文的概念,详见下文
文中只举了同步代码的例子,异步见下文