1浅拷贝
2 深拷贝
Q:堆是如何存一个对象的?
代码
function deepclone(obj)
{
// let cloneObj = typeof obj === '
let cloneObj = Array.isArray(obj) ?[]:{};
if (obj[key] && typeof obj[key] === "object")
{
for(let k in obj)
{
if (obj[k] && typeof obj[k] === 'object')
{
//递归
cloneObj[k] = deepclone(obj[k])
}
else
{
//直接赋值
cloneObj[k] = obj[k]
}
}
}
return cloneObj
}
3 补充
如果 foo中 return obj
obj1和obj2地址一样
let obj ={
a:1,
b:{
a:1,
b:function () {
return 'bb'
}
},
c:function () {
return 'c'
}
}
function foo() {
return {
a:1,
b:{
a:1,
b:function () {
return 'bb'
}
},
c:function () {
return 'c'
}
}
}
let obj1 = foo()
let obj2 = foo()
//foo()在执行时创建对象对返回这个对象,而不是直接返回对象。
obj1.c= 5
obj1.b.a = 6
console.log(obj1);
console.log(obj2);