• 回调和递归


    回调:将一个函数以参数的形式传入到另一个函数中,并且在那个函数中执行

            function fn1(fn){
                fn();
            }
            function fn2(){
                console.log("aaaa");
            }
            fn1(fn2);            
    

    设置回调:

    1、回调一般用于当处理某件事情需要等待时,设置回调
    2、当不需要关心具体后续需要处理的事情时,设置回调

    setTimeout(超时执行的函数,超时时间,执行函数的参数) 返回一个id数

    var id=setTimeout(fn,2000,5);//异步,一定时间后处理问题
            function fn(n){
                console.log(n);
                clearTimeout(id);//清除这个超时函数
            }
    

    setInterval(fn,2000),间隔2秒就会执行一次函数fn,循环执行,直到条件不满足

    var id=setInterval(fn,2000);
            var num=0;
            function fn(){
                num++;
                console.log("aa");
                if(num>3) clearInterval(id);
            } 
    

    用回调写一个路灯的循环 异步

            var id;
            function setLinght(){
                arguments[0](arguments[1],arguments[2]);
            }
            function redLinght(fn,fn2){
                clearTimeout(id);
                console.log("红灯");
                id=setTimeout(fn,2000,fn2,arguments.callee);
            }
            function yellowLinght(fn,fn2){
                clearTimeout(id);
                console.log("黄灯");
                id=setTimeout(fn,2000,fn2,arguments.callee);
            }
            function greenLinght(fn,fn2){
                clearTimeout(id);
                console.log("绿灯");
                id=setTimeout(fn,2000,fn2,arguments.callee);
            }
            setLinght(redLinght,yellowLinght,greenLinght); 
    

    递归:函数内执行当前函数自身函数

            var i=0;
            function fn1(){
                if(i<3) fn1();//不满足条件,就继续执行fn1()
                i++; 
            }
    

    用递归写一个对象的复制

                var obj={
                a:1,
                b:2,
                c:{
                    a:1,
                    b:2,
                    c:{
                        a:1,
                        b:2,
                        c:{
                            a:1,
                            b:2,
                            c:3
                        }
                    }
                },
                d:{
                    a:{
                        a:1,
                        b:{
                            a:1
                        },
                        c:{
                            b:2
                        }
                    },
                    b:{
                        a:1,
                        b:{
                            c:3
                        },
                        c:{
                            d:4
                        }
                    },
                    c:{
                        a:1,
                        b:{
                            e:function(){
                                console.log("a");
                            }
                        },
                        c:{
                            
                        }
                    }
                }
            }
            //浅复制:
            /* var obj1={};
            for(var prop in obj){
                obj1[prop]=obj[prop];
            }
            obj.a=10;//在第一层不会发生改变
            obj.c.a=10;//在第二层就会发生改变
            console.log(obj1); */
    
            //深复制:
            function cloneObj(obj,target){
                target=target || {};
                for(var prop in obj){
                    if(typeof obj[prop]==="object" && obj[prop]!==null){
                        target[prop]={};
                        cloneObj(obj[prop],target[prop])
                    }else{
                        target[prop]=obj[prop];
                    }
                }
                return target;
            }
            var obj1=cloneObj(obj);
            obj.c.a=10;//在第二层不会发生改变
            obj.d.b.b.c=10;//在第第层也会发生改变
            console.log(obj1);
    
  • 相关阅读:
    Flask笔记:cookie
    Flask笔记:文件上传
    Python内置库:threading(多线程操作)
    Linux服务器架设篇,DNS服务器(三),正反解区域的配置
    Linux服务器架设篇,Windows中的虚拟机linux上不了外网怎么办?
    Linux服务器架设篇,DNS服务器(二),cache-only DNS服务器的搭建
    Linux服务器架设篇,DNS服务器(一),基础知识
    Linux网络架设篇,虚拟机l系统中网卡设备名与配置文件不符如何处理?
    Linux网络安全篇,FTP服务器的架设
    Linux基础管理篇,软件管理程序,yum与rpm
  • 原文地址:https://www.cnblogs.com/zmlAliIqsgu/p/13285476.html
Copyright © 2020-2023  润新知