The Call Object

making web/javascript 2011.06.12 17:41

원문: http://rx4ajax-jscore.com/ecmacore/object/call.html

javascript는 함수 실행시에 아래 두 개의 객체의 도움을 받는다.

  • arguments object: 실행될 함수에 전달된 매개변수들과 관련된 속성을 가짐
  • call object

이 두 객체는 함께 동작하며, 다음과 같은 일반적인 특징을 가진다.

  • javascript 함수를 지원한다.
  • 임시적으로 존재한다.
  • 함수가 실행될 때 만들어졌다가 함수가 종료되면 사라진다.
    • call object는 argumets object를 참조한다.
    • 이 포인터는 call object의 속성이다.
    • 이 포인터는 "arguments"라는 이름으로 식별된다.
    • 이 포인터는 argument object이 속성에 접근시에 사용된다.
    • 이 포인터는 함수 실행 시 함수 몸체에서 사용할 수 있다.

[the call object description]

call object는 특별한 임시 객체로 함수가 실행되는 동안 존재한다. call object는 두 가지 중요한 목적을 가진다.

  • argument object를 가리키는 포인터를 제공한다.
  • 함수 실행 시 scope chain을 관장한다.

call object는 이 외의 다른 속성이나 기능이 없다.

[the pointer to the arguments object]
call object는 argument object를 가리키는 포인터를 제공한다. 이 속성이 바로 arguments 속성이다. arguments 속성을 통해 argument object의 속성에 접근할 수 있다.

javascript는 왜 arguments 속성을 call object에 넣어두었을까? 이유는 다음과 같다.

  1. arguments object는 native object가 아니기 때문에 인스턴스를 만드는 등, 끌어다 쓸 방법이 없다. 즉, arguments object의 속성에 접근할 수 있는 방법이 없는거다. 그래서 call object에 arguments object를 가리키는 포인터(속성)을 제공하는 것이다. call object와 arguments object는 함수 실행시에 동시에 만들어졌다가 함수 실행 종료와 함께 동시에 사라진다. javascript의 함수 실행되는데 일조하는 친구들이다.
  2. arguments 속성은 함수의 지역 변수와 함께 scope chain에 들어가야 한다. 그래야만 함수 중첩시에 적절한 arguments object에 접근할 수 있다.

[administer the scope chain]
call object는 함수 실행 중에만 존재한다. call object는 scope chain에 아래 나열한 것들을 가져다놓는다.

  • 함수 내에 선언된 지역 변수
  • 함수에 넘겨진 매개 변수
  • 함수 표현을 도와주는 arguments object의 포인터, 우리가 알고 있는 바로 그 arguments!

위에 나열한 것들은 모두 call object의 속성들이다. call object는 global object와 결합되어 처리한다. 모든 전역 변수들은 global object의 속성이다. 페이지가 초기화될 때 global object는 전역 변수들을 scope chain에 올린다. call object의 목적은 scope chain에 전역 변수에 앞서 지역 변수를 올리는 것이다. javascript는 전역 변수와 지역 변수가 이름이 같다고 해도 지역 변수에 전역 변수가 덮어써지지 않도록 한다. 함수 중첩 시에도 각 함수들은 나름의 call object를 가진다.

요약하자. 두 개의 함수가 같은 이름을 가지고 있을 때 그 독립성은 유지된다.

  • 하위 객체의 scope chain에 있는 변수는 상위 객체의 같은 이름을 가진 변수로 덮어써지지 않는다.
  • 중첩 함수들은 나름의 call object를 통해 지역 변수의 독립성을 보장받는다. 함수 안의 call object는 scope chain의 최상위에 존재한다.
  • call object가 scope chain에서 사라지면, 하위 객체의 변수들은 해당 함수 실행 시에 적절한 scope에서 다시 접근할 수 있다.


저작자 표시 비영리 변경 금지
신고

'making web > javascript' 카테고리의 다른 글

The Call Object  (0) 2011.06.12
How Javascript Timer Work  (0) 2011.06.11
setTimeout with a shorter delay  (0) 2010.03.29
이런 잡스런... - -;  (0) 2010.01.25
Enjoying the Observer pattern with custom events  (0) 2010.01.17
Stuart Langridge: Secrets of Javascript Closures, part 1  (1) 2010.01.14


티스토리 툴바