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
如果是先创建函数的话,那么函数体是什么?此时无法解析函数体的呀?
学习是最好的投资!
function x(y) {console.log(y);if (y==0) return;x(y-1);}
引擎首先解析函数声明,获知定义了一个名为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里的递归靠栈来实现的: