js中的递归函数之执行顺序

看代码,下面是一个递归函数:

		function foo(i){
            if(i==4){
                return;
            }
            console.log("fb:" + i);
            foo(i + 1);
            console.log("fe:" + i);
        }   
        foo(1);

在我还没有执行这段代码前,我想当然的打印输出顺序是:

		打印输出:
		fb:1
		fe:1
		fb:2
		fe:2
		fb:3
		fe:3

然后,我执行之后是这样的:

		打印输出:
		fb:1
		fb:2
		fb:3
		fe:3
		fe:2
		fe:1

Oh,我的天哪。。。其实仔细想一下就会明白,这是很基础的吧。下面是我对应此段代码写的伪代码:

// 伪代码:
        foo(1);//一开始传了一个1进来
        function foo(i){
            if(i==4){
                return;
            }
            console.log("fb:" + i);//第一行输出---fb:1
            //此时执行:foo(i + 1);
            function foo(i){//i = i + 1 = 2  
                if(i==4){
                    return;
                }
           		console.log("fb:" + i);//第二行输出---fb:2
                function foo(i){//i = i + 1 = 3  
                    if(i==4){
                        return;
                    }
            		console.log("fb:" + i);//第三行输出---fb:3
            		console.log("fe:" + i);//第四行输出---fe:3
                }
            	console.log("fe:" + i);//第五行输出---fe:2
            }
            //所以后面的console.log("fe:" + i);被推到嵌套函数foo(i + 1)的后面了
            console.log("fe:" + i);第六行输出---fe:1
        }

总结:始终记住js是 “解释执行”的这个特点,执行是从上到下的。在没有异步的情况下,js代码是不能跳过前面的代码 去执行后面的代码的。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值