JavaScript学习笔记(陆)

87 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第20天,点击查看活动详情

拷贝

浅拷贝 只拷贝最外面一层的数据;更深层次的对象,只拷贝引用
深拷贝 拷贝多层数据;每一层级的数据都会拷贝

Array.from() 方法对一个类似数组或可迭代对象创建一个新的,浅拷贝的数组实例。

拷贝引用的时候,是属于串址,而非传值 深拷贝会把对象里所有的数据重新复制到新的内存空间,是最彻底的拷贝

用 Object.assgin() 实现浅拷贝(扩展运算符 … 也可以实现浅拷贝) Object.assign(目标对象,源对象1,源对象2…)

用 for…in 递归实现深拷贝、 用JSON.stringify序列化

let obj1 = {
    name: 'qianguyihao',
    age: 28,
    info: {
        desc: 'hello',
    },
    color: ['red', 'blue', 'green'],
};
let obj2 = {};

deepCopy(obj2, obj1);
console.log(obj2);
obj1.info.desc = 'github';
console.log(obj2);

// 方法:深拷贝
function deepCopy(newObj, oldObj) {
    for (let key in oldObj) {
        // 获取属性值 oldObj[key]
        let item = oldObj[key];
        // 判断这个值是否是数组
        if (item instanceof Array) {
            newObj[key] = [];
            deepCopy(newObj[key], item);
        } else if (item instanceof Object) {
            // 判断这个值是否是对象
            newObj[key] = {};
            deepCopy(newObj[key], item);
        } else {
            // 简单数据类型,直接赋值
            newObj[key] = item;
        }
    }
}

Object.freeze() 冻结对象 一个被冻结的对象再也不能被修改,冻结一个对象后该对象的原型也不能被修改

闭包

闭包 指在一个函数里,有权访问另一个函数中定义的局部变量
闭包 指有权访问另一个函数作用域中变量的函数。作用:延伸变量的作用范围

闭包:1、密闭的容器        2、闭包是一个对象,存放数据的格式
形成条件:1、函数嵌套        2、内部函数引用外部函数的局部变量
优点:延长外部函数局部变量的生命周期
缺点:容易造成内存泄漏
    合理使用闭包、用完闭包要及时清除