Javascript
자바스크립트 - 컨텍스트
[하마] 이승현 (wowlsh93@gmail.com)
2015. 11. 18. 10:55
1. 실행 컨텍스트
- 실행 가능한 자바스크립트 코드블록이 실행되는 환경
- 실행 컨텍스트가 형성되는 경우
- 전역코드
- eval() 함수로 실행되는 경우
- 함수 안의 코드를 실행한 경우 <- 대부분의 경우임
스택에 들어가고 제어권이 그 컨텍스트로 이동한다.
* 실행 컨텍스트 생성과정
1) 활성객체 생성
- 해당 컨텍스트에서 실행에 필요한 정보(매개변수, 사용자정의 객체 등)들을 저장.
2) arguments 객체 생성
- 활성객체는 arguments 프로퍼티로 arguments 객체 참조
3) 스코프 정보 생성
- 현재 컨텍스트의 유효범위를 나타내는 스코프 정보를 생성. Linked List 구조로 상위 컨텍스트
접근 가능.
접근 가능.
- 현재 생성된 객체가 스코프 체인의 제일 앞에 추가되며, execute()함수의 인자나 지역변수 등에
접근할 수 있다.
접근할 수 있다.
4) 변수 생성
- 컨텍스트 내부에서 사용되는 지역변수 생성.
- 변수나 내부함수를 메모리에 생성만 함. 변수값에 undefined 할당.
(초기화는 각 변수나 함수식 실행 시 수행됨)
(초기화는 각 변수나 함수식 실행 시 수행됨)
5) this 바인딩
- this 키워드를 사용하는 값이 할당됨. 참조객체가 없으면 전역객체 참조.
6) 코드 실행
- 코드 내 표현식 실행. 변수 초기화 ,연산, 또라는 하뭇 실행 등 수행.
(* 전역 실행 컨텍스트는 arguments 객체가 없으며 전역객체 하나만을 포함하는 스코프 체인이 있음)
2. 스코프 체인
- Javascript 에서는 함수내의 {} 블록 구문은 유효범위가 없음. 오직 함수만이 유효범위의 한 단위가 됨.
- 이 유효범위를 나타내는 스코프가 [[scope]] 프로퍼티로 각 함수 객체 내에서 Linked List 형식으로 관리되며 이를 스코프 체인이라 함.
- 각 실행컨텍스트의 변수객체가 구성요소인 리스트와 같다.
- 각각의 함수는 [[scope]] 프로퍼티로 자신이 생성된 실행 컨텍스트의 스코프 체인을 참조한다.
- 이 실행 컨텍스트는 실행된 함수의 [[scope]] 프로퍼티를 기반으로 새로운 체인을 만든다.
1) 전역실행 컨텍스트의 스코프 체인
2) 함수를 호출한 경우 생성되는 실행 컨텍스트의 스코프 체인
2. 클로저
- 이미 생명 주기가 끝난 외부함수의 변수를 참조하는 함수
- 클로저로 참조되는 외부변수를 자유변수(Free Variable) 라 부른다.
1) 클로저의 활용
- 특정 함수 사용자가 정의한 객체의 메서드 연결하기
- 함수의 캡슐화
: 클로저는 사용하여 buffAr 변수를 외부접근으로 부터 차단.
2) 클로저를 활용할 때 주의사항
- 클로저의 프로퍼티 값이 쓰기 가능하므로 그 값이 여러 번 호출로 항상 변할 수 있음에 유의한다.
- 하나의 클로저가 여러 함수 객체의 스코프 체인에 들어가 있는 경우도 있다.
- 루프 안에서 클로저를 활용할 때는 주의하자.