JavaScript 엔진에서 얼마나 많은 재귀 통화를 할 수 있는지 궁금하십니까?
재귀적인 전화 수
다음 기능을 사용하면 답을 찾을 수 있습니다.
코드 사본은 다음과 같습니다.
함수 computemaxcallstacksize () {
노력하다 {
반환 1 + computemaxcallstacksize ();
} catch (e) {
// 스택 오버플로를 호출합니다
반환 1;
}
}
세 가지 결과 :
코드 사본은 다음과 같습니다.
node.js : 11034
Firefox : 50994
크롬 : 10402
이 숫자는 무엇을 나타내나요? Aleph 씨는 V8에서 재귀 통화 수는 두 가지 수량의 수량에 따라 달라집니다. 스택의 크기와 스택 프레임의 크기 (매개 변수를 보유하는 로컬 변수). ComputemaxCallStackSize ()에서 로컬 변수를 추가하여 낮은 값을 반환하는지 확인할 수 있습니다.
ECMAScript 6의 테일 호출 최적화 6
ES6에는 테일 콜 최적화가 있습니다. 함수의 마지막 단계가 함수 호출 인 경우 하위 기능에 의해 호출되는 대신 "점프"됩니다. 즉, ES6 (엄격한 모드)에서는 ComputemaxCallStackSize 기능을 약간 변경하면 영원히 실행할 수 있습니다.
코드 사본은 다음과 같습니다.
함수 computemaxcallstacksize (size) {
크기 = 크기 || 1;
반환 computemaxcallstacksize (size + 1);
}