闭包与递归

161 阅读1分钟

什么是闭包

闭包是一个 访问其他函数内部变量 的 函数

image.png image.png

闭包的作用?

用来解决变量污染。闭包一般用于回调函数

什么是递归

函数内部调用自己

image.png image.png

递归的作用?

1.用来遍历DOM树
2.做深拷贝

浅拷贝 与 深拷贝
浅拷贝: 拷贝地址, 修改拷贝后的数据对原数据有影响
深拷贝: 拷贝数据, 修改拷贝后的数据对原数据没有影响

let obj = {
            name:'张三',
            age:20,
            hobby:['学习','上课','干饭'],
            student:{
                name:'尼古拉斯赵四',
                age:38
            }
        }

        //深拷贝函数
        function copy(obj,newObj){
            for(let key in obj ){
                if( obj[key] instanceof Array ){
                    newObj[key] = []
                    //递归调用 继续深拷贝数组
                    copy(obj[key],newObj[key])
                }else if( obj[key] instanceof Object ){
                    newObj[key] = {}
                    //递归调用 继续深拷贝对象
                    copy(obj[key],newObj[key])
                }else{
                    newObj[key] = obj[key]
                }
            }
        }

        //开始拷贝
        let newObj = {}
        copy(obj,newObj)
        //修改拷贝之后的值
        newObj.name = '李四'
        newObj.hobby[0] = '游戏'
        newObj.student.name = '111'
        console.log(obj,newObj)

image.png