깊은 복사로 console을 해결합니다.log의 중 대상 디버깅 문제
1413 단어 console
var obj={aa:1} console.log(obj); obj.aa=2 console.log(obj);
위 코드를 실행합니다.콘솔을 뛰어넘기 위해.log의 비동기적 특성은 상기 코드를 한 마디 한 마디 컨트롤러에서 실행합니다. 이렇게 하면 비동기적이거나 다중 루틴의 문제를 무시할 수 있습니다.
그리고 결과를 관찰한 결과 두 개의 Object가 출력된 것을 발견했다.마우스를 눌렀을 때 대상의 내용을 볼 수 있지만 두 Object의 내용이 같다는 것을 알 수 있다.즉, 이런 상황에서 언제 출력된obj든 켜진 후에 보이는 것은 마지막obj의 값이지 출력할 때의 대상의 값이 아니다.consolelog은 한 대상의 인용만 출력하기 때문일 수 있습니다. 마우스를 눌렀을 때 메모리에서 이 인용을 찾습니다. 당연히 마지막 값을 찾습니다.이때 실시간 디버깅이 필요하다면 대상의 깊은 복사가 필요하다.원리는 간단하다.
var object_copy=function(obj){
var cache={}
for(var i in obj){
if(typeof(obj[i])=="object"){
cache[i]=object_copy(obj[i])
}else{
cache[i]=obj[i]
}
}
return cache;
}
여기에 귀속 작업이 있습니다. 만약 페이지에 이런 디버깅이 대량으로 있다면 메모리가 넘치거나 창고가 넘칠 수 있으니 조심하십시오.
출처: http://www.html-js.com/?p=1333
console.log 비동기성 사례:
var ret = [1, 2, 3, 4, 5, 3, 2, 5, 7, 8], length = ret.length, middle = length/2, n, r; console.log(ret);//[1, 2, 3, 4, 5, 7, 8, undefined × 3] for ( n = middle; n < ret.length; n++ ) { for ( r = 0; r < middle; r++ ) { if ( ret[r] === ret[n] ) { ret.splice(n--, 1); break; } } } console.log(ret);//[1, 2, 3, 4, 5, 7, 8]
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
콘솔 게임 제작 제1장 그리기(1)(다시) 콘솔에서 움직이는 게임 제작을 할 기회를 얻었으므로 0부터 나름대로 효율적인 제작 방법을 소개합니다. 여기서 말하는 콘솔 게임은 Windows 콘솔에서 움직이는 게임을 말합니다. 이런 사람으로 게임이 움직일...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.