함수의 실행
execution context 💡
execution context(실행 컨텍스트)란 자바스크립트에서 코드가 실행되는
추상적인 공간 이라고 생각하면 된다. 특정 함수 안에서 실행되지 않는다면,
보통은 Global execution context에서 실행된다. 함수는 호출될때
자신만의 컨텍스트를 가지게 된다. 여기서 중요한 것은 호출될때 이다.
context를 만들고 난 뒤에 호출 스택에 쌓게 되고, 쌓인 스택의 가장 맨 위의
함수를 실행 한다.
lexical environment 💡 execution context가 생성되고 난 뒤 변수에 할당된 값을 식별할 수 있는
lexcial environment가 생성된다. 실행 컨텍스트 안에서 참조할 수 있는
값들이 들어가 있으며, 정의되지 않았다면 체이닝된 값을 찾아 상위로 올라가
찾는다.
Ex)
function sum(a) {
return function(b) {
return a + b;
}
}
const sum5 = sum(5);
console.log(sum5(10)); // 15
const sum7 = sum(7);
console.log(sum7(7)); // 14
Global execution context가 생성되고 lexical environment에는
sum은 function으로 sum5와 sum7은 const로 선언되어 있기 때문에
할당은 되어 있지 않다. 코드를 내려가다 sum5를 선언하며 sum(5)가 호출될때
실행 컨텍스트가 하나 만들어 진다. 렉시컬 환경에는 a 값으로 5가 할당 되어
있고, 비로소 글로벌 컨텍스트에 sum5는 func로 바뀐다. console.log에서
sum5(10)이 실행되면 또 하나의 컨텍스트가 생성된다. 렉시컬 환경의 b값은
10으로 할당되고 return 값으로 15를 반환하고 제거되게 된다. 하지만 중간의
컨텍스트는 const로 선언되었기 때문에 사라지지 않고 a = 5 라는 값을
가지고 계속 존재하게 된다.
# execution context 💡 execution context(실행 컨텍스트)란 자바스크립트에서 코드가 실행되는 추상적인 공간 이라고 생각하면 된다. 특정 함수 안에서 실행되지 않는다면, 보통은 Global execution context에서 실행된다. 함수는 호출될때 자신만의 컨텍스트를 가지게 된다. 여기서 중요한 것은 호출될때 이다. context를 만들고 난 뒤에 호출 스택에 쌓게 되고, 쌓인 스택의 가장 맨 위의 함수를 실행 한다. lexical environment 💡 execution context가 생성되고 난 뒤 변수에 할당된 값을 식별할 수 있는 lexcial environment가 생성된다. 실행 컨텍스트 안에서 참조할 수 있는 값들이 들어가 있으며, 정의되지 않았다면 체이닝된 값을 찾아 상위로 올라가 찾는다. Ex) ```js function sum(a) { return function(b) { return a + b; } } const sum5 = sum(5); console.log(sum5(10)); // 15 const sum7 = sum(7); console.log(sum7(7)); // 14 ``` ![image](https://velog.velcdn.com/images%2Fajrfyd%2Fpost%2F1fdc5ee3-7d93-4727-b758-f72997e1626f%2F%E1%84%89%E1%85%B3%E1%84%8F%E1%85%B3%E1%84%85%E1%85%B5%E1%86%AB%E1%84%89%E1%85%A3%E1%86%BA%202022-01-16%20%E1%84%8B%E1%85%A9%E1%84%92%E1%85%AE%204.56.19.png) Global execution context가 생성되고 lexical environment에는 sum은 function으로 sum5와 sum7은 const로 선언되어 있기 때문에 할당은 되어 있지 않다. 코드를 내려가다 sum5를 선언하며 sum(5)가 호출될때 실행 컨텍스트가 하나 만들어 진다. 렉시컬 환경에는 a 값으로 5가 할당 되어 있고, 비로소 글로벌 컨텍스트에 sum5는 func로 바뀐다. console.log에서 sum5(10)이 실행되면 또 하나의 컨텍스트가 생성된다. 렉시컬 환경의 b값은 10으로 할당되고 return 값으로 15를 반환하고 제거되게 된다. 하지만 중간의 컨텍스트는 const로 선언되었기 때문에 사라지지 않고 a = 5 라는 값을 가지고 계속 존재하게 된다.