>  기사  >  웹 프론트엔드  >  Javascript의 익명 재귀 구현을 위한 코드 사례에 대한 자세한 설명

Javascript의 익명 재귀 구현을 위한 코드 사례에 대한 자세한 설명

黄舟
黄舟원래의
2017-05-26 10:01:571198검색

이 글에서는 익명 재귀 구현을 위한 Javascript의 예제 코드를 주로 소개하고, 익명 재귀 구현을 위해 Arguments.callee를 사용합니다. 관심 있는 분들은

재귀는 일반적인 프로그래밍 기술에 대해 알아보세요. 모두가 실명 재귀에 익숙하다고 생각하지만, 익명 재귀를 구현하고 싶다면 어떻게 해야 할까요? 예를 들어 익명 재귀함수를 반환하고 싶거나, 익명 재귀함수를 정의하고 직접 호출하고 싶다면 어떻게 해야 할까요? 이 기사에서는 구현을 살펴보겠습니다.

실명 재귀

팩토리얼을 찾는 가장 간단한 예를 사용하여 실명 재귀부터 시작해 보겠습니다.

function fact(n) {
 if (n < 2) {
  return n;
 } else {
  return n * fact(n - 1);
 }
}
console.log(fact(5));

재귀 요구 사항 함수에 이름이 있으면 너무 쉽습니다.

재귀를 구현하려면 변수 를 사용하세요.

함수는 변수에 할당할 수도 있지만 재귀를 구현하려면 함수 본문이 여전히 변수에 의존합니다. 이 변수 이름:

var f = function(n) {
 if (n < 2) {
  return n;
 } else {
  return n * f(n - 1);
 }
}
console.log(f(5));

이 방법은 이전 방법과 본질적으로 다르지 않다고 해야 할까요.

익명 재귀

이제 익명 재귀 구현에 대해 논의해 보겠습니다.

초기 생각

익명 재귀 함수를 반환하거나 익명 재귀 함수를 정의하고 직접 호출하는 경우:

(function (n) {
 if (n < 2) {
  return n;
 } else {
  return n * ?(n - 1);
 }
})(5);

없는 경우 이름, 코드의 물음표에 무엇을 채워야할지 모르겠고, 재귀를 구성할 수도 없습니다. 이때 어떻게 해야 할까요? 이때 객체 인수를 요청해야 합니다.

인수 객체

자바스크립트 함수에서 인수 객체는 실제로 호출될 때 매개변수 객체를 나타냅니다. 재귀 함수에서는 실제로 "형식 매개 변수" n을 정의할 필요가 전혀 없습니다.

function factNoParam() {
 if (arguments[0] < 2) {
  return arguments[0];
 } else {
  return arguments[0] * factNoParam(arguments[0] - 1);
 }
}
console.log(factNoParam(5));

호출할 때 실제 매개 변수를 전달하는 한 인수[0]를 사용하여 다음을 얻을 수 있습니다. 실제 매개변수 전달된 이 매개변수의 값입니다.

매개변수가 더 있으면 인수[1], 인수[2] 등을 통해 얻을 수도 있습니다.

arguments.callee 속성

인수를 사용하여 매개변수를 얻을 수 있습니다. 이미 알고 계시겠지만 인수는 다음과 같습니다. 객체에는 실제로 callee라는 속성이 있습니다. args.callee는 함수 자체를 나타냅니다. 이것은 무엇을 의미합니까? 사실, 다음과 같이 사실을 작성할 수 있습니다:

function fact(n) {
 if (n < 2) {
  return n;
 } else {
  return n * arguments.callee(n - 1);
 }
}
console.log(fact(5));

그래도 여전히 재귀적입니다. Arguments.callee는 실제로 사실과 동일하기 때문입니다.

이 속성을 사용하면 익명 재귀를 구현하는 것이 어렵지 않습니다. ?를args.callee로 변경하면 됩니다.

(function (n) {
 if (n < 2) {
  return n;
 } else {
  return n * arguments.callee(n - 1);
 }
})(5);

필요한 경우 다음과 같이 할 수도 있습니다. 익명 재귀로 반환됩니다.

위 내용은 Javascript의 익명 재귀 구현을 위한 코드 사례에 대한 자세한 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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