10 이내의 계승을 시도해 보겠습니다.
외부 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절에서 발췌한 내용입니다.