博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

2021/11/09

Posted on 2021-11-10 00:00  为你摘星星  阅读(26)  评论(0)    收藏  举报

一、赋值,浅拷贝,深拷贝

引用数据类型:地址存放在栈中,通过栈中的地址指向堆中的数据。

赋值:将一个基本数据类的值或者引用数据类型的地址赋值给一个新的变量。

浅拷贝:创建一个新的对象,被拷贝的对象内基本数据类型则拷贝的是其值,如果是引用数据类型拷贝的其地址。所以该新对象中的基本数据类型是在栈中重新开辟的,和被拷贝的不一样即互不影响。但是引用数据类型拷贝的是地址,导致会和被拷贝的对象内部的引用数据类型关联起来,互相影响。

深拷贝:创建一个新的对象,基本数据类型直接拷贝,引用数据类型先创建一个同类型的应用数据类型,再对该应用数据类型内部的基本数据类型进行浅拷贝。若是应用数据类型内还有引用数据类型,继续重复该操作。

 

 

1.深拷贝递归实现:

 

 dist = new RegExp(src.source,src.flags)     /abc/ ig

 

 

 深拷贝的实现方法(不完美):   缺点1: 正则表达式 会变成一个空属性,date值也会变成一个空属性。缺点二:函数直接消失了

let obj2 = JSON.parse(JSON.Stringify(obj);

 

 

深拷贝完整版:  当被拷贝的对象内部有个属性,该属性值就是该对象本身

 

 

 函数的新发现:

 

 

 先声明为对象,再用Function  构造函数 可以将他变成一个函数

 

同步任务,微任务,宏任务: