3 回答
![?](http://img1.sycdn.imooc.com/5458657e000125a302200220-100-100.jpg)
TA贡献1831条经验 获得超9个赞
return终止当前函数,并将控制流返回给调用者。
当foo(3);被调用时,函数用i参数 3初始化。它使if语句失败,打印begin: 3,然后调用foo(3 - 1);。此时,当前函数(i参数为 3的函数)将暂停,直到foo(3 - 1);调用完成。
foo(2);打印begin: 2,然后在调用时暂停foo(1)。
foo(1)打印begin: 1,然后在调用时暂停foo(0)。
foo(0)打印begin: 0,并返回:它终止,并将控制流返回给它的调用者,即 的函数调用foo(1)。
foo(1)恢复,并继续执行,打印end: 1。这是函数块的结尾,因此foo(1)函数调用结束,将控制流返回到foo(2)函数调用。
foo(2)恢复,打印end: 2,然后终止,产生控制流回到foo(3)。然后foo(3)打印end: 3,并终止。
return仅终止当前功能。终止所有调用函数(直到catch遇到 a)的唯一方法是抛出错误:
function foo(i) {
if (i < 0)
throw new Error();
console.log('begin: ' + i);
foo(i - 1);
console.log('end: ' + i);
}
foo(3);
![?](http://img1.sycdn.imooc.com/54584ed2000152a202200220-100-100.jpg)
TA贡献1869条经验 获得超4个赞
这应该可以帮助您跟踪代码:
foo(3)
|-- "begin 3"
|-- foo(2)
| |-- "begin 2"
| |-- foo(1)
| | |-- "begin 1"
| | |-- foo(0)
| | | |-- "begin 0"
| | | |-- foo(-1) // returns nothing
| | | |-- "end 0"
| | |-- "end 1"
| |-- "end 2"
|-- "end 3"
添加回答
举报