JavaScript에서 호출자 함수 찾기
JavaScript에서 특정 함수를 누가 호출했는지, 즉 호출자(caller) 함수를 확인하려면 비표준(non-standard) 기능인 function.caller 속성을 사용해야 합니다.
참고로 과거에는 arguments.caller 속성도 같은 목적으로 사용되었지만, 이 속성은 이미 폐기(deprecated)되어 현대 JavaScript 환경에서는 더 이상 동작하지 않습니다.
function.caller란?
function.caller는 해당 함수가 실행 중일 때 이 함수를 호출한 함수에 대한 참조를 반환합니다. 만약 최상위 레벨(글로벌 스코프)에서 호출되었다면 null을 반환합니다.
예제 코드
다음 예제처럼 버튼 클릭 시 Display() 함수가 실행되면서 자신을 호출한 함수 정보를 알림창으로 표시할 수 있습니다.
라이브 데모
<html>
<head>
<script type="text/javascript">
function Display() {
alert("caller is " + Display.caller);
}
</script>
</head>
<body>
<p>아래 버튼을 클릭해 보세요:</p>
<form>
<input type = "button" onclick = "Display()" value="호출자 함수 확인하기">
</form>
</body>
</html>사용 시 주의 사항
function.caller는 표준 기능이 아니며 다음과 같은 제약이 있습니다.
- strict mode에서 사용 불가: 엄격 모드('use strict')에서
caller속성에 접근하면 TypeError가 발생합니다. - 브라우저 호환성 문제: 모든 환경에서 일관되게 동작한다는 보장이 없습니다.
따라서 실무에서는 디버깅 목적으로 Error().stack을 활용해 호출 스택(call stack)을 확인하는 것이 더 안전하고 권장되는 방법입니다.