관리 메뉴

HAMA 블로그

자바스크립트 - 컨텍스트 본문

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) 클로저를 활용할 때 주의사항

  • 클로저의 프로퍼티 값이 쓰기 가능하므로 그 값이 여러 번 호출로 항상 변할 수 있음에 유의한다.



  • 하나의 클로저가 여러 함수 객체의 스코프 체인에 들어가 있는 경우도 있다.



  • 루프 안에서 클로저를 활용할 때는 주의하자.



http://juheejin.tistory.com/48  펌 

Comments