본문 바로가기
개발

[Javascript] 자바스크립트의 실행 문맥(Context)

by 마스터누누 2017. 5. 24.
728x90
반응형

자바스크립트의 실행 문맥(Context)




1
2
3
4
5
6
7
8
9
10
11
12
console.log("global context");  
 
function context1(){  
    console.log("first context");
};
 
function context2(){  
    context1();
    console.log("second context");
};
 
context2(); 
cs


자바스크립트는 하나의 콜 스택을 가지며 이 콜 스택에 함수의 호출 정보 등이 쌓인다.

콜 스택에 쌓이는 함수의 정보를 실행 문맥(Context)이라고 한다.


자바스크립트의 변수는 함수 단위의 Scope를 가지며, 

때문에, 콜 스택에 쌓인 실행 문맥을 기준으로 변수의 스코프가 결정된다.


JS파일이 실행되면 가장 먼저 main context가 스택에 쌓이며,

여기 위로 함수가 호출될 때마다 해당 함수의 context가 쌓이고 실행되며 없어지기를 반복한다.

스택의 모든 함수가 호출되고 JS 파일이 가장 끝에 도달 했을 때 비로소 main context가 사라지며 실행이 완료된다.






즉, 위의 코드는 다음과 같은 그림으로 스택에 쌓이게 된다.

먼저 글로벌 컨택스트인 Main이 가장 먼저 실행되고 Main안에서 함수들이 차례로 스택에 쌓이게된다.

실행이 완료되면 스택에서 제거(Pop)되며, 마지막으로 Main 없어지면 해당 파일은 완전히 실행되는 것이다.






실행문맥은 크게 3가지로 이루어져있다.

1) 활성화 객체 : 실행에 필요한 변수들과 arguments를 담은 객체

2) 유효 범위 정보 : 현재 실행되고 있는 컨텍스트의 유효범위가 담긴 정보

3) this 객체 : 현재 실행 문맥을 포함하는 객체


위의 그림에서 addNumber이라는 함수를 실행하면 아래와 같은 컨텍스트가 만들어 진다.

우선 인자로 들어온 1,2와 이를 모두 담고있는 유사 객체인 arguments이 생기며,

유효범위를 담고 있는 Scope Chain과 현재 실행 객체를 담는 this 또한 컨텍스트에 담긴다.







이렇게 실행 문맥은 위와 같은 그림의 순서로 생성된다.

scope chain은 유효 범위를 담고 있는 일종의 리스트이다.


 arguments 객체는 함수로 들어 오는 인자를 모두 담고 있다.

arguments는 유사 배열 객체의 형태이며 배열이 아니다.

따라서 map, forEach등 배열의 메소드를 사용할수 없으며, 이를 사용하기 위해서는 Array.prototype.~를 써야한다.



참고 자료 : http://www.nextree.co.kr/p7363/

반응형

'개발' 카테고리의 다른 글

[파이썬&루비] 수와 계산  (0) 2017.05.28
[Javascript] 함수(function)  (0) 2017.05.26
[Javascript] Scope와 변수  (0) 2017.05.24
[Javascript] 객체(Object)  (0) 2017.05.23
[AWS] S3 소개  (0) 2017.05.23

댓글