여기에 두 가지 문제가있다 :
이
- 당신은 호출 스택 제한
- 를 초과 할 수 귀하의 설정되어있는 경우 조건부 잘못
을 첫 번째 문제의 경우 : 로 이전 응답자 중 하나인데, 매우 큰 목록이있는 경우 각 요소에 대한 재귀 호출을 수행해야하므로 호출 스택의 한계를 초과 할 수 있습니다. setTimeout
을 실행하는 동안 해킹과 같은 해결책이 될 수 있습니다. 실제 문제는 함수가 배열을 반복적으로 처리하는 것이 아니라 반복적으로 처리하는 것입니다. for-loop를 사용하여 함수를 다시 작성하는 것이 좋습니다. 두 번째 문제를 들어
:
은의 당신의 배열이 [100, 90, 80]
로 설정이 경우 가정 해 봅시다. nextArrayItem()
을 호출하면 처음 두 번 제대로 작동하지만 nextArrayItem()
번으로 전화를 걸면 마지막으로 남은 항목 (이 경우 100
)이 튀어 나오고 성적은 100
으로 설정됩니다.이 값은 사실 값입니다. 따라서 if-conditional이 전달되고 배열이 이제 비어 있어도 프로그램이 호출 스택을 종료해야한다는 사실에도 불구하고 함수가 잘못된 호출을 다시 시도합니다.
크롬에서 예제를 사용하여 코드를 테스트 해 보았습니다. 그 중 하나가 너무 많이 반복되어 빈 배열에서 pop을 호출하면 정의되지 않은 값이 반환됩니다.
어레이를 마지막으로 검사하기 위해 if 조건을 변경하여 을 수정하여이 문제를 해결할 수 있습니다.
var nextArrayItem = function() {
var grade = array1.pop();
if (array1[array1.length-1]) {
nextArrayItem();
}
};
: 수정 된 코드를 참조하십시오