함수안에서 자신을 다시 부를 수 있다.
흔히 재귀함수라고 하는것인데.
factorial(팩토리얼) 알고리즘을 예로 들어 설명한다.
‘팩토리얼 5’의 결과값은 120이다.
5 x 4 x 3 x 2 x 1 = 120
수식은 자신’5’부터 ‘1’까지 1씩 줄여가며 곱하는 것이다
이제 이것을 함수 이름으로 선언하면
function factorial (x) { if (x <= 1) return 1; return x * factorial(x - 1); }
함수 리터럴로 선언하면
var factorial = function(x) { if (x <= 1) return 1; return x * factorial(x - 1); }
그런데 만약 함수리터럴에서 다른이름으로 할당한다면 어떻게 될까 ?
factorial(5); // 120 기존함수 var fact = factorial; // 새 변수에 기존함수 할당 factorial = null; // 기존 함수 제거 fact(5); // error!!
fact 함수안에서 자신이 아닌 factorial을 부르고 있기때문에 자신을 찾을 수가 없다.
함수의 이름을 사용하지 말고 arguments.callee 를 사용해 자신을 불러보자.
var factorial = function(x) { if (x <= 1) return 1; return x * arguments.callee(x - 1); // 자기자신을 부름 }
이렇게 되면 같은 과정을 거쳐 할당을 해도 작동을 한다.
factorial(5); // 120 기존함수 var fact = factorial; // 새 변수에 기존함수 할당 factorial = null; // 기존 함수 제거 fact(5); // 120 정상작동
Total Views: 944 ,