함수 내부에는 arguments, this 라는 특별한 객체가 있다.

arguments 객체 : 배열과 비슷한 객체, 함수에 전달된 매개변수를 모두 포함한다.

                            함수 매개 변수를 표현하는 것이 주요 목적인 객체.

      arguments 객체의 소유자인 함수를 가리키는 포인터인 callee라는 프로퍼티도 있다.

this 객체 : 함수가 실행중인 컨텍스트 객체에 대한 참조.

this의 값은 함수를 호출하는 시점에 정해진다. 따라서 해당 함수가 반환하는 값 역시 함수를 호출하는 시점에 따라 다르다.

caller 프로퍼티 : 해당 함수를 호출한 함수에 대한 참조를 저장.

전역 스코프에서 호출하면 null이 저장된다.

함수와 이름 사이의 의조성을 제거 하려면  arguments.callee.caller를 쓸 수 있다.

예) function outer() { inner() }

function inner() { alert(inner.caller)}

function innter() {alert(arguments.callee.caller)}

※ strict 모드에서는 arguments.callee, arguments.caller 의 호출은 에러를 낸다. 스트릭트 모드에서는 해당 프로프티 사용에는 좀 더 주의가 필요하다.

※ 함수 이름은 단순히 포인터를 저장한 변수일 뿐이다. 즉 함수의 내용 자체와 함수명은 별개로 생각해야 한다. 함수명은 단순히 어떤 함수 내용을 가리키는 포인터일 뿐이다.


+ Recent posts