티스토리 뷰
어제, 스코프와 클로저에 대해 배웠다. 배우면서 자연스럽게 컨텍스트 실행이라는 단어가 나왔다.
그렇다면, '컨텍스트 실행'은 무엇일까?
컨텍스트 실행
'컨텍스트(Context)'는 코드가 실행될 때 변수와 함수에 접근할 수 있는 '범위(Scope)'를 나타낸다.
컨텍스트는 '실행 컨텍스트(Execution Context)'라는 내부 데이터 구조로 관리가 된다. 각각의 실행 컨텍스트는 변수, 함수 선언, this 값 등과 같은 정보를 갖고 있다.
컨텍스트 실행은 '스택(Stack)' 형태로 관리가 된다. 새로운 코드 블록이 실행될 때마다 해당 코드 블록에 대한 새로운 실행 컨텍스트가 생성이 되고, 새로 생성된 컨텍스트는 스택의 가장 위에 쌓인다. 코드 블록의 실행이 완료되면 해당 실행 컨텍스트는 스택에서 제거되며, 이전 실행 컨텍스트로 되돌아가게 된다.
function outer() {
var outerVariable = 'I am outside!';
function inner() {
var innerVariable = 'I am inside!';
console.log(outerVariable);
console.log(innerVariable);
}
inner();
}
outer();
이해하기 쉽게 예시 코드로 살펴보자.
위 예시 코드에서 'outer' 함수는 외부 함수이며, 'inner' 함수는 내부 함수다. 그리고 'outer' 함수 내에서 'inner' 함수를 호출하고 있는 것을 확인할 수 있다.
컨텍스트의 실행 흐름은 다음과 같다.
- 전역 컨텍스트(Global Context)는 코드가 실행되는 가장 처음의 컨텍스트이다. 전역 변수와 전역 함수가 초기화된다.
- 'outer' 함수 실행 컨텍스트는 'outer' 함수가 호출될 때 생성되는 컨텍스트이며, 'outerVariable' 변수가 선언되고 값이 할당된다.
- 'inner' 함수 실행 컨텍스트는 'inner' 함수가 호출될 때 생성되는 컨텍스트이며, 'innerVariable' 변수가 선언되고 값이 할당된다.
- 'inner' 함수 실행 컨텍스트에서 'console.log(outerVariable)'과 'console.log(innerVariable)'가 실행이 되며, 이 때 'outerVariable'은 'outer' 함수의 실행 컨텍스트에 참조된다.
- 'inner' 함수 실행이 완료가 되고, 'inner' 함수 실행 컨텍스트가 스택에서 제거된다.
- 'outer' 함수 실행이 완료가 되고, 'outer' 함수 실행 컨텍스트가 스택에서 제거된다.
- 전역 컨텍스트에서 코드 실행이 종료된다.
위의 내용만 보면 정확하게 이해가 안 될 수 있다. 쉽게 말하면,
- 전역 컨텍스트는 코드가 실행되는 가장 처음의 컨텍스트로, 전역 변수와 전역 함수가 초기화가 된다. 이 컨텍스트도 컨텍스트 실행으로 스택에 쌓인다.
- 'outer' 함수 실행 컨텍스트는 'outer' 함수가 호출될 때 생성되는 컨텍스트로, 'outer' 함수가 호출되면 'outer' 함수의 실행 컨텍스트가 스택에 쌓이고, 'outerVariable' 변수가 선언되고 값이 할당된다. 따라서, 'outer' 함수 실행 컨텍스트가 스택에 쌓이고 그 후에 'outerVariable' 변수가 스택에 쌓이게 된다.
- 이 후, 'inner' 함수 실행 컨텍스트가 생성되고 스택에 쌓인다. 'inner' 함수 실행 컨텍스트에서는 'innerVariable' 변수가 선언되고 값이 할당된다. 'inner' 함수 실행 컨텍스트에서 'console.log(outerVariable)'과 'console.log(innerVariable)'이 실행될 때, 'outerVariable'는 'outer' 함수 실행 컨텍스트에서 참조되며 'innerVariable'은 'inner' 함수 실행 컨텍스트에서 참조된다.
- 'inner' 함수 실행이 완료되고 'inner' 함수 실행 컨텍스트가 스택에서 제거된 후, 'outer' 함수 실행이 완료되고 'outer' 함수 실행 컨텍스트가 스택에서 제거된다.
- 마지막으로 전역 컨텍스트에서 코드 실행이 종료된다.
즉, 컨텍스트는 함수 호출 시 생성되며, 해당 함수 실행에 필요한 변수와 함수, 실행 순서 등을 관리하는 데 사용된다. 컨텍스트는 스택에 쌓이고 실행이 완료되면 스택에서 제거된다.
I am outside!
I am inside!
그래서 결과적으로 실행 결과는 위와 같다.
이를 통해 컨텍스트 실행의 흐름을 확인할 수 있다. 각 함수 호출 시 해당 함수의 실행 컨텍스트가 실행이 되고, 실행이 완료가 되면 해당 컨텍스트가 스택에서 제거가 된다. 이렇게 컨텍스트를 관리함으로써 변수와 함수에 접근하고 실행 순서를 제어할 수 있다.
'프론트엔드 > JavaScript' 카테고리의 다른 글
PoC는 무엇일까? (0) | 2024.07.11 |
---|---|
크롬 확장 프로그램을 만들면서 겪은 에러 (0) | 2023.07.17 |
스코프와 클로저 (0) | 2023.05.31 |
반복문 속 setTimeout을 실행할 때 (0) | 2023.05.27 |
정규표현식, 더 쉽게 해보기 (0) | 2023.03.01 |
- Total
- Today
- Yesterday
- 코딩테스트 대비
- 스프링
- Frontend
- 그룹인터뷰후기
- React
- 개발자이력서꿀팁
- javascript
- node
- 싱글톤
- 개발 이력서 지원 팁
- 포스텍애플아카데미
- LottieFiles
- DB Error MongooseServerSelectionError
- 자바스크립트
- 프론트엔드 챌린지
- 포스텍애플디벨로퍼아카데미
- Singleton
- 신입개발자가 준비해야 할 것들
- Express
- 원티드 프리온보딩
- if(kakao)dev2022
- 고민한 부분
- Default Branch
- 설명회느낌점
- PostechAppleDeveloperAcademy
- #포스텍애플디벨로퍼아카데미
- 원티드 프리온보딩 챌린지
- 조코딩과함께
- 깃허브 Merge
- 최종추가합격
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 |