예를 들어 비교적 간단합니다.
영역이 있는데 이제 그 안의 모든 노드를 삭제해야 합니다. 많은 분들이 이렇게 쓰실 거라 믿습니다.
var divpanel = document.getElementById("newbody");
var controlinfo= divpanel.childNodes;
for(var index = 0;index < controlinfo.length ;index )
{
divpanel. RemoveChild(controlinfo[index ]);
}
얼핏 보면 그렇죠, 그렇죠, 하나씩 순회하다가 결국 다 삭제됩니다. 하지만 잘 생각해보면 노드가 삭제될 때마다 controlinfo.length가 점점 작아지는데, 이것이 계속되면 모든 노드를 삭제할 수 없게 되는 버그가 있습니다. 그렇다면 어떻게 개선해야 할까요? 처음부터 시작하는 것이 불가능하기 때문에 이미 매우 명확합니다. 다음과 같이 완전히 올바른 끝부터 시작하겠습니다.
var divpanel = document.getElementById("newbody");
var controlinfo= divpanel.childNodes
for(var index = controlinfo.length - 1;index > = 0 ;index--)
{
divpanel.removeChild(controlinfo[index])
}
디버깅, 매우 좋음 !
이런 종류의 함정은 JavaScript뿐만 아니라 기본적으로 C#, Java 등 모든 언어에서 발생하는 문제이며 때로는 이러한 문제로 인해 많은 시간을 낭비하게 됩니다. . 나는 이 문제에 대해 오랫동안 알고 있었지만 항상 내 기억을 너무 신뢰하고 제대로 기록하지 못했습니다. 이제는 나 자신에게 경고하고 모든 사람들과 공유하기 위해 기록합니다.