名词解释
调用堆:是解释器追踪函数执行流的一种机制,但执行环境中调用多个函数时,通过这种机制能够追踪到那个函数正在执行,执行函数体中有调用了那个函数。
- 每调用一个函数,解释器就会把该函数添加进调用栈并开始执行。
- 正在调用栈中执行的函数还调用了其他函数,那么新的函数也将会被添加进调用栈,一旦这个函数被调用,便会立即执行
- 当前函数执行完毕后,解释器将其清空调用栈,继续执行当前执行环境下的剩余代码。
- 当分配的调用栈空间被沾满时,会引发“堆栈溢出”。
上面代码执行流程:function greeting(){sayHi();}function sayHi(){return "Hi !"}greeting()
- 忽略前面所有函数,直到greenting()函数被调用。
- 把greeting()添加进调用栈列表。
执行greeting()函数 中的所有代码
调用栈列表
- greeting
代码执行到sayHi()时,该函数被调用。
- 把sayHi() 添加进调用栈列表
- 执行sayHi()函数体中的代码,直到全部执行完毕
- 返回来继续执行greeting()函数体中sayHi()后面的代码。
- 删除调用栈列表中sayHi()函数
当greeting()函数体中的代码全部执行完毕,返回到调用greeting()的代码行,继续执行剩下的JS代码
调用栈列表
- greeting
删除调用栈列表的greeting()函数
总结,一开始我们得到一个空空如也的调用栈,随后,每当有函数被调用都会自动添加进调用栈,执行完函数中的代码后,调用栈又会自动的移除这个函数,最后,我们又得到一个空空如也的调用栈
