闭包和递归

文章详细阐述了JavaScript中的闭包概念,包括其定义、作用,如访问父函数变量和保持变量状态。同时,解释了递归的基本原理,递归函数的特性以及如何实现递归深拷贝对象。通过示例代码展示了闭包如何锁定父函数变量,以及递归在深拷贝复杂数据结构时的应用。
摘要由CSDN通过智能技术生成

1. 闭包

1.1 闭包的定义

定义在一个函数内部的函数

1.2 闭包的作用

可以访问父函数中的变量
可以锁住父函数中的变量

1.2.1 可以访问父函数中的变量

var name = 'window';
    var object = {
        name: 'object',
        getName: function () {
            var name = 'getName';
            function fn() {
                console.log(name);//getName
                console.log(this.name);//window
            }
            fn();
        }
    }
    object.getName();

1.2.2 可以锁住父函数中的变量

function random(min, max) {
        var num = Math.floor(Math.random() * (max - min) + min);
        return function () {
            console.log(num)
        }
    }
    var result = random(1, 10);
    console.log(result);//函数
    result();
    result();
    result();
    result();
    // 闭包可以锁住父函数中的变量 所以每次输出的数字一样

1.3 闭包的本质

父函数作用域成为永恒作用域

2. 递归

2.1 递归的定义

函数自己调用自己

2.2 特点

类似于循环
必须有结束语句

2.3 递归的深拷贝

var obj = {
        name: 'obj',
        age: 20,
        object: {
            name: "object",
            age: { age: 20 }
        },
        arr: [1, 2, 3]
    }
    var newObj = {}
    // 递归函数
    function recursion(newObj, obj) {
        for (key in obj) {
            // 判断对象
            if (obj[key] instanceof Object) {
                // 进行递归深拷贝
                newObj[key] = {}
                recursion(newObj[key], obj[key])
            }
            // 判断数组
            else if (obj[key] instanceof Array) {
                newObj[key] = []
                recursion(newObj[key], obj[key])
            } else {
                newObj[key] = obj[key]
            }
        }
    }
    recursion(newObj, obj)
    newObj.name = 'newObj';
    newObj.object.name = 'newObject';
    newObj.object.age.age = 22;
    console.log(obj);
    console.log(newObj);

执行结果

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值