심층 복제의 실현
2279 단어 전단 면접 문제
얕은 복사와 깊은 복사
얕은 복사: 복사된 값은 인용이지 실제 값이 아니다. 깊이 복사된 값은 인용이 아니라 실제 값이다.복제된 요소가 대상이라면, 깊이 복사는 대상을 다시 만들고, 대상의 값을 하나씩 복제하는 것이지, 그 대상의 인용 값만 얻는 것이 아니다.
왜 깊이를 나누어 복사해야 합니까
분명히 얕은 복사는 매우 큰 문제를 가져올 것이다.즉, 만약 내가 복제한 값이 인용 주소라면, 내가 변수를 통해 이 대상을 수정하면 모든 대상의 인용이 달라질 것이다.
slice/concat 모두 얕은 복사입니다
하나의 예
var a = [1,2,{name: 'amy'}];
var b = a.concat([]);
b[2].name = 'sam';
console.log(a[2].name);// ‘sam’
함수 매개 변수의 값별 전달
《javascript 고급 프로그램 설계》라는 책에서 언급한 함수의 매개 변수 전달은 모두 값에 따라 전달되지만 인용 형식의 데이터를 전송하고 함수 안에서 수정하면 실제 참조의 변화를 초래할 수 있음을 발견할 수 있다.이것이 바로 인용 유형의 비밀이다.js에서는 인용 형식을 무더기에 분배합니다. 우리가 성명한 변수는 이 대상을 저장하는 것이 아니라 대상의 인용을 저장하는 것입니다.따라서 매개 변수를 전달할 때도 값에 따라 전달된다.그러나 이 값은 인용이기 때문에 같은 인용을 수정하면 대상의 직접적인 변화를 초래할 수 있다.
딥 카피 구현
그렇다면 우리는 어떻게 심층 복사를 실현합니까?
function deepClone(obj) {
var newObj = obj instanceof Array ? [] : {};
//obj , obj
if(typeof obj !== 'object') {
return obj;
} else {
//obj ,
for(var i in obj) {
newObj[i] = typeof obj[i] === 'object' ? deepClone(obj[i]):obj[i];
}
}
return newObj;
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
promise,async,await 비동기 원리와 실행 순서우리는await 이후의 문장은 await 표현식의 함수가 실행되고 결과를 얻은 후에야 계속 실행될 수 있다는 것을 알고 있다.async 함수에 await 표현식이 있을 수 있습니다. 이것은 async 함수의 실행을 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.