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代码是不能跳过前面的代码 去执行后面的代码的。

你可能感兴趣的:(js)