身边的人每天都在用它,却不知道他叫什么(闭包,递归)

108 阅读2分钟
闭包

1.闭包是什么?

  • (1)闭包是使用其他函数内部的变量的函数
  • (2)函数=函数+其他函数的内部变量
  • (3)函数=函数+上下文引用 2.闭包的作用:解决全局变量污染
            function fn(){
            let a = 1
            //在fn1函数中, 访问了其他函数fn内部的变量。  fn1 + a 形成闭包
            function fn1(){
                console.log(a)
            }
            fn1()
            }
            fn()
递归

1.递归是什么?

  • 在函数内部调用自己 2.递归的作用
  • 浅拷贝与深拷贝
  • 遍历DOM树
        //递归
        let i = 1
        function fn(){
            if(i<=3){
                console.log('热爱大前端')
                i++
                fn()//递归
            }
        }

        fn()
浅拷贝与深拷贝
  1. 浅拷贝:拷贝地址,修改拷贝后的数据,原数据也会变化
        //声明一个对象
        //拷贝: 把对象中存储的数据 拷贝一份赋值给其他对象
        let obj = {
            name:'我彭于晏',
            age:30,
            hobby:['睡觉','睡觉','打豆豆'],
            friend:{
                name:'朋友',
                sex:'男'
            }
        }

        //浅拷贝: 拷贝的是地址
        let obj1 = obj
        //由于浅拷贝,拷贝的是地址。 所以修改拷贝后的数据,原来的数据也会变化
        obj1.hobby = '美食'
        console.log(obj1,obj)
  1. 深拷贝:拷贝数据,修改拷贝后的数据,原数据也不会变化
  • 推荐 json : let obj = JSON.parse( JSON.stringify( 对象 ) )
        //声明一个对象
        //拷贝: 把对象中存储的数据 拷贝一份赋值给其他对象
        let obj = {
            name:'我彭于晏',
            age:30,
            hobby:['睡觉','睡觉','打豆豆'],
            friend:{
                name:'朋友',
                sex:'男'
            }
        }
        let newObj = JSON.parse( JSON.stringify( obj ) )
        newObj.friend = '胡歌'
        console.log(newObj,obj)
  • 递归
        思路:
        (1)遍历obj,把所有的属性添加给newObj
        (2)如果obj[key]是引用类型(数组、对象),则不能直接拷贝地址
            (2.1)数组:给newObj声明一个空数组,然后遍历obj[key],把里面元素添加给newObj[key]
            (2.2)对象:给newObj声明一个空对象,然后遍历obj[key],把里面元素添加给newObj[key]
        (3)如果obj[key]不是引用类型,则直接赋值。结束递归