ecmascript - javascript 在解析函数时候的流程
PHPz
PHPz 2017-04-10 15:13:26
0
2
738

见如下代码

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

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

PHPz
PHPz

学习是最好的投资!

全員に返信 (2)
Peter_Zhu

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

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

いいねを押す+0
    Peter_Zhu

    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|
    いいねを押す+0
      最新のダウンロード
      詳細>
      ウェブエフェクト
      公式サイト
      サイト素材
      フロントエンドテンプレート
      私たちについて 免責事項 Sitemap
      PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!