var array = listenerArray.slice(0); 和深拷贝有什么区别呢?还有Object.assign() 请做一个区分吧
1 回答
临摹微笑
TA贡献1982条经验 获得超2个赞
1.拷贝是指得到被拷贝对象的副本,副本的修改不会影响到原对象
2.js的传参是按值传递,但是对于引用类型,传递的值是原对象在内存中的地址,所以拷贝仅仅是获取了原对象的引用
3.在2的基础上,对拷贝进行修改,原对象也会被修改
4.要想避免3的情况出现,就不能仅仅拷贝地址,而是要将原对象的属性树遍历复制到拷贝上,这样拷贝和原对象就是完全独立的了
5.4的情况叫深拷贝,与之相对,2的情况叫浅拷贝
6.如果所有值都是非引用类型,那么深浅拷贝没有差别
7.所以对于你的问题,slice可看作浅拷贝,因为如果listenerArray有引用类型的元素的话,slice仅仅是复制了元素的地址,而深拷贝是复制了整个元素
添加回答
举报
0/150
提交
取消