84669인 학습
152542인 학습
20005인 학습
5487인 학습
7821인 학습
359900인 학습
3350인 학습
180660인 학습
48569인 학습
18603인 학습
40936인 학습
1549인 학습
1183인 학습
32909인 학습
见如下代码
function x(y) { console.log(y); if (y==0) return; x(y-1); }
运行x(5)结果就是将会log出
x(5)
log
5 4 3 2 1 0
这些东西,但是问题来了,当js引擎遇到这个语句的时候,他是如何解析的。 如果是先解析内部的话,遇到x(y-1)的时候就会向上寻找x函数,但是此时x函数并创建,那么是怎么找到x函数的呢?
x(y-1)
x
如果是先创建函数的话,那么函数体是什么?此时无法解析函数体的呀?
学习是最好的投资!
引擎首先解析函数声明,获知定义了一个名为x的函数对象 在解析执行函数顺序 1)console.log(y); 2) 如果y=0 退出函数执行 3) 如果不是,执行函数对象x ...
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|
function x(y) {
console.log(y);
if (y==0) return;
x(y-1);
}
引擎首先解析函数声明,获知定义了一个名为x的函数对象
在解析执行函数顺序
1)console.log(y);
2) 如果y=0 退出函数执行
3) 如果不是,执行函数对象x
...
js里的递归靠栈来实现的: