2011-09-07 6 views
1

함수가 재귀 적으로 호출되면 인수라는 함수 스택을 얻는 방법이 궁금합니다. 각각 다른 함수를 호출하는 정상적인 함수가 있으면 작동합니다. 하지만 을 재귀 적 스택에서 가져 오려고한다면, 나는 항상 마지막으로 전달 된 인수를 얻습니다. 난 항상 같은 결과를 얻을 것이다이 경우 JavaScript는 함수 호출 recusrive에서 스택 인수를 얻습니다.

function a(p1, p2) { 
    b(p1, p2, 3) 
} 

function b(p1, p2, p3) { 
    c(p1, p2, p3, 4) 
} 

function c(p1, p2, p3, p4) { 
    console.log(arguments.callee.caller.caller); 
} 

a(1, 2) 

:

var i = 3; 

function a(p1, p2) { 
    var args = Array.prototype.slice.apply(arguments); 
    args.push(i); 

    while (--i > 0) { 
     arguments.callee.apply(arguments.callee, args); 
    } 

    if (i === 0) { 
     console.log(arguments.callee.caller.caller.caller.caller); 
    } 

} 

a(1, 2); 

답변

0

arguments.callee를 ==라는 기능 전류가이 기능의 호출자가 항상 호출 기능 자체를 가리키는을, 재귀 함수에서 호출자는 맨 위로 추적하지 않지만 항상 같은 함수를 가리 킵니다.

function printBacktrace(fun,stackDepth){ 
    var callee = fun;  
    while(callee.caller && stackDepth > 0){ 
     console.log(callee.caller.name); 
     callee = callee.caller ;stackDepth--; 
    } 
} 
function f(n){ 
    if(!n){printBacktrace(f,20)}else{f(n-1)} 
} 
f(3) 

이 20 배 console.log가 발생합니다.
현재이 문제를 해결할 방법을 찾을 수 없습니다. 개인적으로 자바 스크립트에서 잘못된 디자인이라고 생각합니다.

관련 문제