>  기사  >  웹 프론트엔드  >  JavaScript_javascript 기술이 지원하는 최대 재귀 호출 수 분석

JavaScript_javascript 기술이 지원하는 최대 재귀 호출 수 분석

WBOY
WBOY원래의
2016-05-16 16:43:111899검색

JavaScript 엔진이 얼마나 많은 재귀 호출을 할 수 있는지 궁금하십니까?

재귀 호출 횟수

다음 기능을 사용하면 답을 찾을 수 있습니다. (Ben Alman의 요지에서 영감을 얻음)

코드 복사 코드는 다음과 같습니다.

함수 계산MaxCallStackSize() {
{
을 시도해 보세요             1개 반환 ComputeMaxCallStackSize();
} 잡기 (e) {
// 호출 스택 오버플로
1을 반환;
}
}

3가지 결과:

코드 복사 코드는 다음과 같습니다.

Node.js: 11034
파이어폭스: 50994
크롬: 10402

이 숫자는 무엇을 의미하나요? Mr. Aleph는 V8에서 재귀 호출 수가 스택 크기와 스택 프레임 크기(매개변수를 보유하는 로컬 변수)라는 두 가지 양에 따라 달라진다고 지적했습니다. ComputeMaxCallStackSize()에 지역 변수를 추가하여 이를 확인할 수 있습니다. 이는 낮은 값을 반환합니다.

ECMAScript 6의 테일 콜 최적화

ES6에는 테일 호출 최적화 기능이 있습니다. 함수의 마지막 단계도 함수 호출인 경우 하위 함수를 통해 호출되는 대신 "건너뛰기"됩니다. 이는 ES6(엄격 모드)에서는 ComputeMaxCallStackSize 함수를 약간만 변경하면 영원히 실행될 수 있음을 의미합니다.

코드 복사 코드는 다음과 같습니다.

함수 계산MaxCallStackSize(크기) {
크기 = 크기 || 1;
return ComputeMaxCallStackSize(크기 1);
}

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.