이번에는 노트가 무엇인지 알려드리겠습니다. 실제 사례를 살펴보겠습니다.
재귀 함수: 재귀 함수는 자신을 이름으로 호출하여 구성됩니다.
계승 함수를 재귀적으로 구현합니다.
방법 1: 함수 이름
function factorial(num){ if(num<=1){ return 1; }else{ return num*factorial(num-1); } } console.log(factorial(4));
을 사용하세요. 결과는 다음과 같습니다: 24;
그러나 이 재귀 구현 방법에는 다음 코드에 문제가 있습니다.
function factorial(num){ if(num<=1){ return 1; }else{ return num*factorial(num-1); } } var anthorFactorial=factorial; console.log(anthorFactorial(4));
결과는 다음과 같습니다: 24;
하지만:
function factorial(num){ if(num<=1){ return 1; }else{ return num*factorial(num-1); } } var anthorFactorial=factorial; factorial=null; console.log(anthorFactorial(4));
결과는 다음과 같습니다. 오류
그 이유는 다음과 같습니다:
우리가 정의한 함수 이름은 실제로 함수에 대한 포인터이고 우리가 정의한 anotherFactorial도 해당 함수를 가리키므로 anotherFactorial(4)를 호출하면 24
를 성공적으로 출력할 수 있습니다. Factorial = null인 경우 define function 실행 참조는 anotherFactorial에 남게 되며 anotherFactorial(4) 호출 시 위와 같은 오류 메시지가 출력됩니다.
이때, 함수 정의에서 팩토리얼을 대체하기 위해 Arguments.callee를 사용할 수 있습니다.
방법 2:args.callee
function factorial(num){ if(num<=1){ return 1; }else{ return num*arguments.callee(num-1); } } var anthorFactorial=factorial; factorial=null; console.log(anthorFactorial(4));
를 사용하여 결과는 다음과 같습니다: 24
args.callee는 실행 중인 함수에 대한 포인터이므로,args.callee를 사용하여 함수에 대한 재귀 호출을 구현할 수 있습니다. 함수 이름 대신에args.callee를 사용하면 함수 호출 시 문제가 발생하지 않는다는 것을 확인할 수 있습니다. 따라서 재귀 함수를 작성할 때 함수 이름을 사용하는 것보다args.callee를 사용하는 것이 항상 더 안전합니다.
그러나 엄격 모드에서는 인수.callee에 스크립트를 통해 액세스할 수 없으며 이 속성에 액세스할 때 오류가 보고됩니다. 그러나 함수 표현식에 이름을 지정하면 동일한 효과를 얻을 수 있습니다.
방법 3: 명명된 함수 표현식을 통해
var factorial=function f(num){ if(num<=1){ return 1; }else{ return num*f(num-1); } }; f=null; console.log(factorial(4));
이 접근 방식은 엄격 모드와 비엄격 모드 모두에서 작동합니다.
이 기사의 사례를 읽은 후 방법을 마스터했다고 생각합니다. 더 흥미로운 정보를 보려면 PHP 중국어 웹사이트의 다른 관련 기사를 주목하세요!
추천 도서:
위 내용은 JS의 재귀 구현 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!