js_javascript 기술의 재귀 함수 사용 소개

WBOY
풀어 주다: 2016-05-16 17:48:50
원래의
1424명이 탐색했습니다.

10 이내의 계승을 시도해 보겠습니다.


[Ctrl A 모두 선택 참고:
외부 J를 도입해야 하는 경우 실행하려면 새로 고쳐야 합니다.
]



재귀 함수 호출에 대한 내용은 이렇습니다.

js 재귀 함수가 자신을 호출할 때의 보험 방법.
js 고급 프로그래밍에서
전형적인 계승 재귀 함수: 코드 복사
코드는 다음과 같습니다.


함수 팩트(num){
if (num<=1){
return 1;
}else{
return num*fact(num-1); 🎜> }
}


다음 코드는 오류를 일으킬 수 있습니다.
var anotherFact =fact;
fact =
alert(antherFact(4)); //Error

fact가 더 이상 함수가 아니기 때문에 오류가 발생했습니다.
실행 중인 함수에 대한 포인터인args.callee를 사용하면 문제를 해결할 수 있습니다.
새 기능은 다음과 같습니다. 코드는 다음과 같습니다.


functionfact(num ){
if (num<=1){
return 1;
}else{
return num*arguments.callee(num-1);
}
}
var anotherFact =fact;
fact = null;
alert(antherFact(4)) //결과는 24입니다.


JS의 일반 재귀 개선


재귀 함수는 아래와 같이 함수가 이름으로 자신을 호출할 때 형성됩니다. 코드는 다음과 같습니다.


function Factorial(num)
{
if(num<=1)
{
return 1;
}
else
{
return num * 계승(num-1)
}
}


고전적인 계승 함수입니다. 겉으로는 아무런 문제가 없어 보이지만, 다음 코드를 실행하면 문제가 발생할 수 있습니다.
var anotherFactorial =factorial;

anotherFactorial(4); //출력 24
factorial = null
anotherFactorial(4); //TypeError: 객체의 'factorial'; Window]는 함수가 아닙니다. chrome에서 테스트
그 이유는 우리가 정의한 함수 이름이 실제로는 함수를 가리키는 포인터이기 때문입니다. 이때 anotherFactorial도 정의되어 있고 해당 함수도 가리키므로 anotherFactorial(4)을 호출합니다. 24
를 성공적으로 출력할 수 있습니다. 이때, Factorial = null이면 실행 정의 함수의 참조는 anotherFactorial입니다. 그러면 anotherFactorial(4)을 호출할 때 위의 오류 메시지가 표시됩니다.
이때 인수.callee를 사용하여 함수 정의에서 계승을 대체할 수 있습니다.
함수 정의는 다음과 같습니다. 코드는 다음과 같습니다:


function Factorial(num)
{
if(num<=1)
{
return 1 ;
}
else
{
return num *args.callee(num-1);
}
}


그런 다음 위의 4를 사용하세요. 테스트 코드 라인, 테스트 코드의 마지막 라인도 성공적으로 출력될 수 있습니다. 24.
------------------------------- ----------- -- 위 내용은 <<고급 JavaScript 프로그래밍>> 2판 144페이지 7.1절에서 발췌한 내용입니다.
관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 추천
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿