递归、回调

2017-10-17  本文已影响17人  放飞吧自我

递归函数:在函数的内部调用自己,递归函数应该给出口否则就会一直执行

// 递归在函数内部调用自身
    var i=10;
    function test(){
        i--;
        if (i<=0) {
            return;//出口
        }
         console.log(i)
    test()
    }
test();//打印结果9,8,7,6,5,4,3,2,1
var i=10;
 function test(){
        var a =i--;
        if (i<0) {
        return;
        }
        test();
        console.log(a); 
 }// 先由外往内执行,再由内向外执行
    test();//最后执行结果为1,2,3,4,5,6,7,8,9,10
//当执行到i-1时,则跳出本次test函数,返回上一个test函数执行下面的代码,代码执行完再跳出,再执行上一个test 函数,知道跳出第一个test函数
01.png

若函数不给出口

function test(){
        console.log("你好")
        test();
            
        }
        test();
//打印结果为你好,将会一直执行直到栈区的内存空间全部占满,之后出现:Uncaught RangeError: Maximum call stack size exceeded
//这句话的意思是最大调用栈大小超过

递归的小应用

// 快速排序 - 递归
        var i=0;
        var sum = 0;
        function add(num){
            
            var i=num--;
            sum += i;
            if (num<0) {
                return;
            }
            add(num);
            return sum;
        }
        var res = add(5);
        console.log(res);//res=15;

回调函数:把一个函数当做参数传给另一个函数,然后在另一个函数里面去调用这个函数。就叫做回调函数

// 应用场景:不知道什么时间应用,不知道应用什么函数
        function request(fn){
            console.log("开始网络请求")
            setTimeout(function(){
                console.log("得到请求数据");
                fn();
            },(Math.random()*3+1)*1000);
        }
        function show(){
            console.log("把数据展示在HTML上")
        }
        function showWomen(){
            console.log("把女人展示在HTML上")
        }
        function showCar(){
            console.log("把汽车展示在HTML上")
        }
        function showArmy(){
            console.log("把军事展示在HTML上")
        }

        request(show);
        request(showArmy);
        request(showWomen);
        request(showCar);
上一篇 下一篇

猜你喜欢

热点阅读