2013-06-29 4 views
-1

나는 내 질문에 해외 그림을 보여 주려고한다. 함수가 있다고 가정하면이 함수 안에 다른 함수 호출이 있고 마지막으로 첫 번째 함수는 값을 반환합니다. 이제내부 함수 호출 받기

function a() { 
    return 1; 
} 

function b() { 
    var result = a(); 
    return 2 + result; 
} 

b(); 

는 B() 메소드를 호출 한 후, 나는 어떤 기능은 B() 함수 내에서 호출 얼마나 많은과 알고 싶어요. 그것을 어떻게 성취 할 수 있습니까?

+1

http://stackoverflow.com/questions/10182387/any-tools-to-draw-call-graphs-for-given-javascript는 일부 접착제를 줄 수 있습니다. –

+2

디버깅이나 프로그램 논리를 사용하여 디버깅을 알고 싶습니까? 후자는 [캡슐화 개념] (http://en.wikipedia.org/wiki/Separation_of_concerns)을 위반하므로 나쁜 디자인 결정이됩니다. 기능 만이 그 내부에서 일어나는 일에 대해 책임을집니다. – Bergi

+0

@Bergi, It 분명히 나쁜 디자인이 될 것이지만 캡슐화의 개념을 위반하는 이유는 무엇입니까? – Tushar

답변

1

이렇게하는 방법은 정통입니다. 그러나 반대쪽에서 a() 내부에있는 arguments.callee.caller에 액세스하여 누가 함수 a()를 호출했는지 확인할 수 있습니다.

하지만, 당신이 함수는 함수 내에서 호출되어 무엇을 찾는 방법에 대한 실제 심각한 경우에, 당신은 항상 b.toString()을 다음 당신은 AST 발생기가 필요 수동으로 코드 :

+0

'b'가 접근 할 수없는 범위에서 오는 경우'b.toString()'이 너무 도움이되지 않습니다 :-) – Bergi

+0

이 예제의 외부 범위에서 작업하고 있다고 가정합니다. –

0

을 구문 분석 할 수 있습니다. this과 같은 자바 스크립트 파서를 사용하십시오.