debugger;
const name = 'heaeun';
function getName() {
const name = 'heaeun';
console.log(name);
}
getName();
실행 컨텍스트는 렉시컬 스코프 안에 정의되어 있는 변수
, 변수 호이스팅 정보
, 스코프 체인
, this binding
에 대한 정보들을 담고 있다
리액트를 사용한다고 가정했을때,
어떤 코드냐에 따라서 생성되는 실행 컨텍스트가 달라진다.
실행 컨텍스트는 하나의 자바스크립트 파일이 실행될때 생성된다.
전역 코드
자바스크립트 파일이 실행되자마자 전역 컨텍스트부터 활성화된다.
함수 코드
함수 내에 존재하는 코드를 실행하기 위한 함수 컨텍스트
현재 실행 중인 작업에 관한 정보를 저장하는 Stack 자료 구조
전체 코드의 환경과 순서가 항상 보장된다
가장 마지막
에 들어간 실행 컨텍스트를 가장 먼저
실행하고 실행이 종료되면 제거되고 다음 컨텍스트가 실행된다✅ 콜스택은 자바스크립트 동작 정보를 담아두었다가 실행할때 참고한다
💡 위와 같은 순서로 동작하기 때문에 실행 순서가 보장된다
debugger;
function a() {
const name = 'a';
console.log(`안녕 난 함수 ${name} 🤘🏻`);
b();
}
function b() {
const name = 'b';
console.log(`안녕 난 함수 ${name} 🤘🏻`);
c();
}
function c() {
const name = 'c';
console.log(`안녕 난 함수 ${name} 🤘🏻`);
}
a();
👉🏻 a 함수 실행
👉🏻 b 함수 실행
👉🏻 c 함수 실행
변수 객체 라고도 함
LexicalEnvironment의 스냅샷
다른 LexicalEnvironment
를 참조
하기 위한 정보
들 - scope 탐색
스코프 제인
에 대한 정보가 담겨있다함수 실행 컨텍스트아 콜스택에 푸쉬된다
함수가 실행되기 전에 자바스크립트 엔진은 함수 실행에 필요한 모든 정보를 수집한다
이처럼 함수 또는 변수 선언을 끌어올리는 것을 호이스팅이라 한다.
밑에 선언된 변수 또는 함수가 마치 위에서 선언된 것처럼 에러가 안나는 것을 말한다
실행할때 할당할 값에 관심을 가지고 있는 것이 아니라,
앞으로 어떤 변수를 사용할 것인지에 대한 정보를 가지고 있다.
이런 현상을 호!이!스!팅! 이라 한다
this, scope, hoisting에 관련된 정보들을 다 담아서 코드가 어떻게 실행 될 것인지에 대한 정보를 가지고 있는 것이 실행 컨택스트이다.