Notice
Recent Posts
Recent Comments
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
Tags
- 자료구조 정렬
- redux 사용 이유
- request body undefined
- 선형리스트
- javascript module
- react event bind
- web server vs was
- centos7 설치
- es6 module
- parcel
- task queue
- server side rendering
- 순차리스트
- react
- javascript eventloop
- express request body
- client side rendering
- 자료구조 queue
- parcel resolver error
- DOM API
- Call stack
- body-parser
- typescript parcel tilde
- Event Loop
- 일급 객체
- Browser API
- 자료구조
- redux 특징
- javascript first class citizen
- first class citizen
- Today
- 8
- Total
- 557,693
비실이의 개발 성장기
실행 컨텍스트 (Execution context) 정리 본문
실행 컨텍스트란 (Execution Context, E.C)
실행 가능한 javascript 코드 블럭이 실행되는 환경
실행 컨텍스트가 생성되는 시점
실행 가능한 코드(전역 코드, eval() 로 실행되는 코드, 함수 내부의 코드) 가 실행되면 각각의 독립적인 실행 컨텍스트가 생성된다.
(ex. 함수가 실행되는 시점에 해당 함수의 실행 컨텍스트가 생성된다.)
생성 된 실행 컨텍스트는 순서대로 콜 스택(Call Stack) 에 push 된다.
스택이므로 가장 마지막에 추가 된 실행 컨텍스트가 현재 실행되고 있는 컨텍스트다.
실행 컨텍스트는 작업이 종료되면 콜 스택에서 pop 된다.
실행 컨텍스트 생성 코드 예
1 2 3 4 5 6 7 8 9 10 11 12 | console.log('this is global context'); function ExContext1() { console.log('this is ExContext1'); } function ExContext2() { ExContext1(); console.log('this is ExContext2'); } ExContext2(); | cs |
다음 코드가 실행되면 함수가 호출되는 시점에 실행 컨텍스트가 생성되고 콜 스택에 push/pop 된다.
1. push - 전역 컨텍스트
2. push - console.log
3. pop - console.log
4. push - ExContext2 컨텍스트
5. push - ExContext1 컨텍스트
6. push - console.log
7. pop - console.log
8. pop - ExContext1 컨텍스트
9. push - console.log
10. pop - console.log
11. pop - ExContext2 컨텍스트
12. pop - 전역 컨텍스트
즉, 예제 코드 실행 결과는 다음과 같다.
실행 컨텍스트 내부 생성 과정
1 2 3 4 5 6 7 8 9 10 11 12 | function execute(param1, param2) { var a = 1; var b = 2; function func() { return a + b; } return param1 + param2 + func(); } execute(3, 4); | cs |
1. javascript 엔진에 의해 변수 객체(Variable Object) 생성
- 변수 객체란: 해당 컨텍스트 실행에 필요한 데이터 들을 담을 객체 (변수 객체를 활성 객체라고 부르기도 한다.)
- 변수 객체는 javascript 엔진 내부에서 제어가 이루어진다.
- 아래 나열하는 2 ~ 5 번들은 모두 변수 객체 내부에 생성된다.
2. arguments 객체 생성
- 매개변수 정보를 담고 있는 유사배열
3. [[scope]] 생성
- 현재 컨텍스트의 유효 스코프 정보를 담고 있는 리스트
4. 지역 변수 생성
- 변수를 생성만 할 뿐, 선언한 값 초기화는 해당 변수나 함수의 표현식이 실행되기 전까지는 이루어지지 않는다.
- 표현식 실행은 2 ~ 5번 과정이 모두 끝나고 6번 과정에서 이루어진다.
- 예제코드 기준으로 param1 = value, param2 = value, a = undefined, b = undefined, func = Function Object 로 할당된다.
5. this 바인딩
- 해당 함수가 객체의 함수(메소드) 로 호출되는지, 함수로 호출되는지에 따라 this 바인딩이 달라진다.
- 위 코드에서는 함수로 호출 되었으므로 this 는 전역 객체(window) 를 바인딩 한다.
6. 코드 실행
- 표현식 실행과 연산, 다른 함수 실행이 이루어진다.
참고: 인사이드 자바스크립트
'프론트엔드 > javascript' 카테고리의 다른 글
javascript ES6 모듈(Module) (0) | 2020.06.20 |
---|---|
호이스팅(Hoisting) 정리 (0) | 2019.03.03 |
일급 객체 (First-class citizen) (1) | 2018.11.06 |
[javascript] 모듈 사용방식과 번들러 사용 이유 (2) | 2018.05.26 |
javascript 클로저 코드를 통해 알아보기 (1) | 2017.04.17 |
2 Comments