javascript 在解析函数时候的流程
见如下代码
function x(y) {
console.log(y);
if (y==0) return;
x(y-1);
}
运行
x(5)
结果就是将会
log
出
5
4
3
2
1
0
这些东西,但是问题来了,当js引擎遇到这个语句的时候,他是如何解析的。
如果是先解析内部的话,遇到
x(y-1)
的时候就会向上寻找
x
函数,但是此时
x
函数并创建,那么是怎么找到
x
函数的呢?
如果是先创建函数的话,那么函数体是什么?此时无法解析函数体的呀?
v8 ecmascript5 ecmascript JavaScript
MadaoCC
10 years ago
Answers
js里的递归靠栈来实现的:
==> y = 5 , x(5) , console.log(5) x(5)|
==> y = 4 , x(4) , console.log(4) x(4)|x(5)|
==> y = 3 , x(3) , console.log(3) x(3)|x(4)|x(5)|
==> y = 2 , x(2) , console.log(2) x(2)|x(3)|x(4)|x(5)|
== y = 1 , x(1) , console.log(1) x(1)|x(2)|x(3)|x(4)|x(5)|
==> y = 0 , x(0) , console.log(0) x(0)|x(1)|x(2)|x(3)|x(4)|x(5)|
==> out stack x(1)|x(2)|x(3)|x(4)|x(5)|
==> out stack x(2)|x(3)|x(4)|x(5)|
==> out stack x(3)|x(4)|x(5)|
==> out stack x(4)|x(5)|
==> out stack x(5)|
==> out stack empty stack|
白色的卡妙
answered 10 years ago