【JS四大金刚】闭包 深拷贝浅拷贝 原型相关的 ajax 相关的

本文详细介绍了JavaScript中的闭包概念及其应用场景,包括其在内存管理和函数复用中的作用,同时探讨了深拷贝与浅拷贝的区别,提供了实现深拷贝的几种方法。此外,还深入讲解了原型链的工作原理,包括prototype显式原型、__proto__隐式原型、constructor以及原型链查找机制。文章最后简要提及了AJAX在数据交互中的重要性。
摘要由CSDN通过智能技术生成

一、闭包:

一个函数中嵌套了一个函数,内层函数可以访问外部函数的变量。

怎么用到闭包呢?

有的时候想获取到局部变量,正常情况下是获取不到的,这个时候就可以使用闭包来获取。

闭包可以封装对象的方法和私有属性,vue中的data就是一种闭包形式。

闭包作为回调函数,可以实现函数的复用。

优点:

        可以长期驻扎在内存中,重复使用函数,不会造成内存污染

缺点:

        函数中的变量都被保存在内存中内存消耗很大,网页会发生性能问题,内存泄露的情况,所以不能滥用闭包。解决方式是在退出函数之前,把所有不需要的变量全部删除。

二、深拷贝 浅拷贝

1.浅拷贝: 将原对象的引用直接赋给新对象,新对象只是原对象的一个引用,而不复制对象本身,新旧对象还是共享同一块内存

2.深拷贝: 创建一个新的对象和数组,将原对象的各项属性的“值”(数组的所有元素)拷贝过来,是“值”而不是“引用”,新对象跟原对象不共享内存,修改新对象不会改到原对象

深拷贝拷贝的是,浅拷贝拷贝的是地址

        // 基本数据类型复制的是值  深拷贝
        let num = 10;
        let str = 'aaa';
        let num2 = num;
        num2 = 20;
        console.log(num,num2);//10 , 20

        // 引用数据类型复制的是地址  浅拷贝
        let arr = [1,2,3]
        let arr2 = arr;
        arr[1]='aa';
        console.log(arr2,arr);// [1, "aa", 3] , [1, "aa", 3]

基本数据类型存在栈中 ,引用对象类型存在堆中

数组深拷贝的方法:1.JSON.parse(JSON.stringify( ) ) 2.concat  3.展开运算符...

对象深拷贝的方法:1.JSON.parse(JSON.stringify( ) )  2.用递归实现

递归方法:

        // 递归实现对象的深拷贝
        // 递归就是自身调用自身
        function deepcopy(obj) {
            let obj2 = {}; //保存拷贝之后的东西
            for (const key in obj) {
                // instanceof是判断数据类型的
                if (obj[key] instanceof Object) {
                    // console.log(obj[key]);
                    obj2[key] = deepcopy(obj[key]);
                    // console.log(obj2[key]);
                } else {
                    // console.log(obj[key]);
                    obj2[key] = obj[key];
                }
            }

            return obj2;
        }

        let data = {
            name: "小明",
            friend: {
                name: "小强",
            },
        };
        let data2 = deepcopy(data);

 三.原型相关的

1. prototype 显式原型

           每个函数都有一个 prototype 属性,被称为显式原型,里面包含了这个构造函数公共的方法

2. \_ _proto_ 隐式原型

           每个实例对象都会有\_ _proto_ _属性,其被称为隐式原型

           每一个实例对象的隐式原型\_ _proto_ _属性指向自身构造函数的显式原型 prototype

3. constructor

           每个 prototype 原型都有一个 constructor 属性,指向它关联的构造函数。

4. 原型链

           获取对象属性或者方法的时候,如果对象本身没有这个属性,那就会去他的原型\_ _proto_ _上去找,如果还查不到,就去找原型的原型,一直找到最顶层(Object.prototype)为止。Object.prototype 对象也有_ _proto_ \_属性值为 null。

四、ajax相关的

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值