调用栈是解释器(就像浏览器中的javascript解释器)追踪函数执行流的一种机制。当执行环境中调用了多个函数时,通过这种机制,我们能够追踪到哪个函数正在执行,执行的函数体中又调用了哪个函数。
我们在执行js代码的时候,当我们执行一个函数的时候,解析器就会把该函数给添加到调用栈中,调用栈开始执行;如果这个函数里面还有调用其他函数的话,调用的这个函数就会被添加到调用栈中去; 调用栈中的函数一执行结束就会从调用栈中清除出去,调用栈继续执行接下来的代码; 如果调用栈空间被占满了,就会引发“堆栈溢出”。
我们来看看一个例子:
function a() {
// some code
b()
// some code
}
function b(){
console.log('hello')
}
a()
以上的代码块执行顺序是这样的:
1、执行到函数a的时候,吧a()添加到调用栈列表中并且执行
2、执行a函数中调用b函数之前的代码
3、执行到b函数的时候,吧b函数添加到调用栈,并且执行
4、b函数执行结束,从代码栈中清出,并执行a函数之后的代码
5、a执行完毕,从调用栈清出
6、继续执行接下来的代码。
一开始,我们得到一个空空如也的调用栈。随后,每当有函数被调用都会自动地添加进调用栈,执行完函数体中的代码后,调用栈又会自动地移除这个函数。最后,我们又得到了一个空空如也的调用栈。
了解更多:
网友评论