javascript 在解析函数时候的流程

发布于 2022-09-01 07:15:53 字数 399 浏览 22 评论 0

见如下代码

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函数的呢?

如果是先创建函数的话,那么函数体是什么?此时无法解析函数体的呀?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

过气美图社 2022-09-08 07:15:53

function x(y) {
console.log(y);
if (y==0) return;
x(y-1);
}

引擎首先解析函数声明,获知定义了一个名为x的函数对象
在解析执行函数顺序
1)console.log(y);
2) 如果y=0 退出函数执行
3) 如果不是,执行函数对象x
...

寒冷纷飞旳雪 2022-09-08 07:15:53

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|
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文