步骤:当脚本调用函数时,解释器将其添加到调用堆栈,然后开始执行该函数。
当函数调用的任何函数都会进一步添加到调用堆栈中,并在其调用的位置运行。
当前函数执行完之后,解释器将其从堆栈中取出并从最后一个代码清单中从中断处继续执行。
如果堆栈占用的空间超过了分配给他的空间,出现堆栈溢出的错误。
example:
functiongreeting(){
// [1] Some codes
heresayHi();
// [2] Some codes here
}
function sayHi()
{return"Hi!";}
// Invoke the `greeting`
function greeting();
// [3] Some codes here
上面的代码将执行如下:
忽略所有函数,直到它到达greeting() 函数调用。
将`greeting`函数添加到调用堆栈列表中。
执行`greeting`函数中的所有代码行。
进入sayHi()函数调用。
将该sayHi()函数添加到调用堆栈列表中。
执行sayHi()函数内的所有代码行,直到结束。
将执行返回到调用的行sayHi()并继续执行greeting()函数的其余部分。
sayHi()从我们的调用堆栈列表中删除该函数。
当greeting()函数内部的所有内容都被执行后,返回其调用行继续执行其余的JS代码。
greeting()从调用堆栈列表中删除该函数。
我们从一个空的调用堆栈开始,每当我们调用一个函数时,它会自动添加到调用堆栈中,在执行所有代码后,它会自动从调用堆栈中删除。最后,我们最终得到了一个空堆栈。
网友评论