함수 내부에는 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 의 호출은 에러를 낸다. 스트릭트 모드에서는 해당 프로프티 사용에는 좀 더 주의가 필요하다.
※ 함수 이름은 단순히 포인터를 저장한 변수일 뿐이다. 즉 함수의 내용 자체와 함수명은 별개로 생각해야 한다. 함수명은 단순히 어떤 함수 내용을 가리키는 포인터일 뿐이다.
'프론트엔드 개발자를 위한 자바스크립트 프로그래밍 공부 > 5장 참조타입' 카테고리의 다른 글
원시 래퍼 타입 (1) | 2019.02.07 |
---|---|
함수 프로퍼티와 메서드 (0) | 2019.01.29 |
값처럼 쓰이는 함수 (1) | 2019.01.25 |
함수 타입 (0) | 2019.01.25 |
RegExp 생성자 프로퍼티 (0) | 2019.01.24 |