2. 실행 콘텍스트
실행 콘텍스트
- ES5에서 동일한 조건/환경을 지니는 것은(= 실행 콘텍스트를 구성하는 방법은) 함수밖에 없다. (전역공간도 하나의 함수라고 봄)
=> 실행 콘텍스트는 함수를 실행할 때 필요한 환경정보 또는 이를 담은 객체 - 실행 콘텍스트는 활성화되는 시점에 VariableEnvironment, LexicalEnvironment, ThisBinding 세 가지 정보를 수집.
- ES66에서는 블록에 의해서도 새로운 실행 콘텍스트가 생성됨(블록 스코프...if문, 반복문 등)
Call Stack 콜스택
-
현재 어떤 함수가 동작하고 있는지, 다음에 어떤 함수가 호출되어야 하는지 등을 제어하는 자료구조.
-
stack : 우물같은 구조. 가장 마지막에 들어온 게 가장 빨리 빠지는 개념. 콜스택은 실행에 관한 것.
VariableEnvironment
- LexicalEnvironment의 초기 상태 (스냅샷)
LexicalEnvironment
- 함수 실행 도중에 변경되는 사항이 실시간으로 반영.
environmentRecord와 호이스팅
- environmentRecord에는 현재 문맥의 식별자 정보 = Hoisting 호이스팅된 식별자 정보들이 저장됨.
- 매개변수 식별자, 함수 자체, var로 선언된 변수의 식별자
호이스팅 규칙
- 변수는 선언부만, 함수 선언은 함수 전체를 호이스팅.
- 함수 표현식은 변수 선언부만 호이스팅
- 호이스팅이 끝난 상태에서의 함수 선언문은 함수명으로 선언한 변수에 함수를 할당한 것처럼 여길 수 있음
function b() {} //호이스팅된 함수 선언
var b = function b() {} //함수명으로 선언한 변수에 함수 할당
함수 선언문과 함수 표현식
- 함수 선언문 : function 정의부만 존재. 별도의 할당 명령 없음.
- 함수 표현식: 정의한 함수를 별도의 변수에 할당
- 상대적으로 함수 표현식이 안전하다. (함수가 중복 선언되어 코드가 꼬이는 것을 막기 위해)
- 함수 선언문
function a() {~~}
a(); //실행 OK
(익명) 함수 표현식
: 변수명 b가 곧 함수명
var b = function () {~~}
b(); //실행 OK
기명 함수 표현식
: 변수명은 c, 함수명은 d
var c = function d() {~~}
c(); //실행 OK
d(); //에러!
스코프, 스코프 체인, outerEnvironmentReference
- outerEnvironmentReference는 바로 직전 콘텍스트의 LexicalEnvironment 정보를 참조.
- 스코프: 변수의 유효범위
스코프 체인 Scope Chain
-
'식별자의 유효범위'를 안에서부터 바깥으로 차례로 검색해나가는 것.
-
자신의 environmentRecord부터 식별자 찾기 시작해서 없으면 outerEnvironmentReference를 타고 하나씩 외부로 나가는 것.
-
더 외부의 스코프에 동일한 식별자가 또 있더라도 자신과 가장 가까운 식별자만 접근 가능.(변수 은닉화)
-
스코프 체인을 가능하게 하는 것이 outerEnvironmentReference.
(inner의 outerEnvironmentReference는 outer의 LexicalEnvironment)
자신보다 바깥에 있는 함수의 식별자에는 접근할 수 있지만 안에 있는 함수의 식별자에는 접근할 수 없다.
전역변수와 지역변수
- 전역변수 : 전역 공간에서 선언한 변수
- 지역변수 : 함수 내부에서 선언한 변수
this
- 실행 콘텍스트의 thisBinding에는 this로 지정된 객체가 저장.
- 실행 컨텍스트 활성화 당시에 this가 지정되지 않은 경우 this에는 전역 객체가 저장됨.
Author And Source
이 문제에 관하여(2. 실행 콘텍스트), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://velog.io/@pika/실행-콘텍스트-xqmj1tfu
저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
- 함수 실행 도중에 변경되는 사항이 실시간으로 반영.
environmentRecord와 호이스팅
- environmentRecord에는 현재 문맥의 식별자 정보 = Hoisting 호이스팅된 식별자 정보들이 저장됨.
- 매개변수 식별자, 함수 자체, var로 선언된 변수의 식별자
호이스팅 규칙
- 변수는 선언부만, 함수 선언은 함수 전체를 호이스팅.
- 함수 표현식은 변수 선언부만 호이스팅
- 호이스팅이 끝난 상태에서의 함수 선언문은 함수명으로 선언한 변수에 함수를 할당한 것처럼 여길 수 있음
function b() {} //호이스팅된 함수 선언 var b = function b() {} //함수명으로 선언한 변수에 함수 할당
함수 선언문과 함수 표현식
- 함수 선언문 : function 정의부만 존재. 별도의 할당 명령 없음.
- 함수 표현식: 정의한 함수를 별도의 변수에 할당
- 상대적으로 함수 표현식이 안전하다. (함수가 중복 선언되어 코드가 꼬이는 것을 막기 위해)
- 함수 선언문
function a() {~~} a(); //실행 OK
(익명) 함수 표현식
: 변수명 b가 곧 함수명var b = function () {~~} b(); //실행 OK
기명 함수 표현식
: 변수명은 c, 함수명은 dvar c = function d() {~~} c(); //실행 OK d(); //에러!
스코프, 스코프 체인, outerEnvironmentReference
- outerEnvironmentReference는 바로 직전 콘텍스트의 LexicalEnvironment 정보를 참조.
- 스코프: 변수의 유효범위
스코프 체인 Scope Chain
-
'식별자의 유효범위'를 안에서부터 바깥으로 차례로 검색해나가는 것.
-
자신의 environmentRecord부터 식별자 찾기 시작해서 없으면 outerEnvironmentReference를 타고 하나씩 외부로 나가는 것.
-
더 외부의 스코프에 동일한 식별자가 또 있더라도 자신과 가장 가까운 식별자만 접근 가능.(변수 은닉화)
-
스코프 체인을 가능하게 하는 것이 outerEnvironmentReference.
(inner의 outerEnvironmentReference는 outer의 LexicalEnvironment)
자신보다 바깥에 있는 함수의 식별자에는 접근할 수 있지만 안에 있는 함수의 식별자에는 접근할 수 없다.
전역변수와 지역변수
- 전역변수 : 전역 공간에서 선언한 변수
- 지역변수 : 함수 내부에서 선언한 변수
this
- 실행 콘텍스트의 thisBinding에는 this로 지정된 객체가 저장.
- 실행 컨텍스트 활성화 당시에 this가 지정되지 않은 경우 this에는 전역 객체가 저장됨.
Author And Source
이 문제에 관하여(2. 실행 콘텍스트), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://velog.io/@pika/실행-콘텍스트-xqmj1tfu
저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
Author And Source
이 문제에 관하여(2. 실행 콘텍스트), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@pika/실행-콘텍스트-xqmj1tfu저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)