자바스크립트에서 함수의 실행 컨텍스트(Execution Context)란 무엇인가요?

_____
Q1: 함수의 실행 컨텍스트(Execution Context)란 무엇인가요?
A1: 실행 컨텍스트는 자바스크립트 코드가 실행되는 환경을 의미합니다. 함수의 실행 컨텍스트는 함수가 호출될 때마다 생성되어 해당 함수가 실행되는 동안 필요한 변수, 매개변수, 함수 선언, this 값 등을 관리하는 객체 형태의 구조를 말합니다.

Q2: 실행 컨텍스트는 왜 중요한가요?
A2: 자바스크립트는 함수 단위로 실행 환경을 관리하기 때문에, 실행 컨텍스트를 통해 각 함수가 독립적인 변수 환경을 가지며, 스코프 체인과 this 바인딩 등이 동작할 수 있습니다. 따라서 코드를 정확히 이해하고 디버깅하기 위해 실행 컨텍스트를 이해하는 것이 필수적입니다.

Q3: 함수 실행 컨텍스트는 어떻게 생성되나요?
A3: 함수가 호출될 때마다 자바스크립트 엔진은 다음 과정을 거쳐 실행 컨텍스트를 생성합니다:
1. 실행 컨텍스트 객체 생성
2. 변수 환경(Variable Environment) 설정: 함수 내부 변수와 매개변수 등록
3. 스코프 체인 설정: 현재 컨텍스트가 접근할 수 있는 변수들의 링크 생성
4. this 바인딩 결정
5. 함수 코드 실행

Q4: 실행 컨텍스트 내부에는 어떤 정보가 저장되나요?
A4: 실행 컨텍스트는 보통 세 가지 주요 구성 요소를 포함합니다:
- 변수 환경 (Variable Environment): 함수 안의 변수와 매개변수가 저장됩니다.
- 렉시컬 환경 (Lexical Environment): 변수 환경과 유사하지만, 더 넓은 범위에서의 변수를 참조하기 위한 구조입니다.
- this 바인딩: 함수 내에서 사용되는 this 참조 값
Q5: 함수 실행 컨텍스트와 전역 실행 컨텍스트는 무엇이 다른가요?
A5: 전역 실행 컨텍스트는 자바스크립트 코드가 처음 실행될 때 생성되는 기본 실행 환경입니다. 반면 함수 실행 컨텍스트는 각각의 함수 호출 시 생성되어 함수 단위의 독립적인 환경을 만듭니다. 전역 실행 컨텍스트는 프로그램 종료 시까지 유지되지만 함수 실행 컨텍스트는 함수 실행이 끝나면 사라집니다.

Q6: 실행 컨텍스트는 실행 스택과 어떤 관계가 있나요?
A6: 실행 컨텍스트는 콜 스택(Call Stack) 위에 쌓입니다. 함수가 호출되면 해당 함수의 실행 컨텍스트가 스택에 push 되고, 실행이 완료되면 pop 됩니다. 이 구조 덕분에 자바스크립트는 동기적으로 함수를 실행할 수 있습니다.

Q7: 실행 컨텍스트는 어떻게 this 값을 결정하나요?
A7: 함수 실행 컨텍스트가 생성될 때 this 바인딩은 함수 호출 방식에 따라 결정됩니다:
- 일반 함수 호출: 글로벌 객체(window 또는 undefined strict mode)
- 메서드 호출: 호출한 객체
- 생성자 호출(new): 새로 생성된 객체
- 명시적 바인딩(call, apply, bind): 인자로 전달된 객체

Q8: 화살표 함수의 실행 컨텍스트는 일반 함수와 어떻게 다른가요?
A8: 화살표 함수는 자신만의 실행 컨텍스트를 생성하지만, this 바인딩을 새로 만들지 않고 상위 실행 컨텍스트의 this를 그대로 사용합니다. 즉, this가 렉시컬하게 결정됩니다.

Q9: 실행 컨텍스트 관련된 개념 중 스코프 체인(Scope Chain)은 무엇인가요?
A9: 스코프 체인은 실행 컨텍스트가 변수와 함수를 검색할 때 참조하는 연결 리스트 같은 구조로, 현재 실행 컨텍스트와 상위 컨텍스트의 변수 객체들을 연결하여 접근할 수 있게 합니다.

Q10: 요약하면 함수 실행 컨텍스트의 핵심 역할은 무엇인가요?
A10: 함수 실행 컨텍스트는 함수 실행 시 변수, 매개변수, 스코프, this 등의 실행 환경을 관리하여 함수 내 코드가 의도대로 동작하도록 하는 기본 단위이자 실행 환경 그 자체입니다.
자바스크립트에서 함수의 실행 컨텍스트(Execution Context)는 함수가 실행될 때 생성되는 환경을 의미합니다.

이는 함수의 실행에 필요한 정보와 상태를 담고 있는 객체로, 자바스크립트의 동작 방식과 스코프(scope), 변수, this 키워드의 동작을 이해하는 데 중요한 개념입니다.

실행 컨텍스트는 다음과 같은 세 가지 주요 구성 요소로 이루어져 있습니다.

1. Variable Environment (변수 환경) 변수 환경은 현재 실행 컨텍스트에서 사용할 수 있는 변수와 함수 선언을 포함합니다.

이 환경은 함수가 호출될 때 생성되며, 해당 함수의 매개변수와 내부에서 선언된 변수들이 포함됩니다.

예를 들어, 함수 내에서 선언된 변수는 해당 함수의 실행 컨텍스트에 저장되며, 외부에서 접근할 수 없습니다.



2. Lexical Environment (렉시컬 환경) 렉시컬 환경은 변수 환경과 비슷하지만, 스코프 체인을 포함합니다.

이는 현재 실행 컨텍스트와 그 상위 실행 컨텍스트를 연결하여, 변수를 찾을 때 어떤 스코프에서 검색할지를 결정합니다.

자바스크립트는 렉시컬 스코프를 따르기 때문에, 함수가 정의된 위치에 따라 변수를 찾는 방식이 결정됩니다.

즉, 함수가 호출될 때의 위치가 아니라, 함수가 선언된 위치에 따라 스코프가 결정됩니다.



3. This Binding (this 바인딩) 실행 컨텍스트는 또한 this 키워드의 값을 결정합니다.

this는 함수가 호출되는 방식에 따라 다르게 바인딩되며, 실행 컨텍스트는 this의 값을 결정하는 중요한 역할을 합니다.

예를 들어, 객체의 메서드로 호출될 때와 일반 함수로 호출될 때 this의 값이 다릅니다.

실행 컨텍스트의 생성 과정 1. 전역 컨텍스트 : 자바스크립트 코드가 실행되면, 가장 먼저 전역 실행 컨텍스트가 생성됩니다.

이는 전역 변수와 함수 선언을 포함하며, 전역 객체(브라우저에서는 window 객체)가 생성됩니다.



2. 함수 호출 : 함수가 호출될 때마다 새로운 실행 컨텍스트가 생성됩니다.

이때, 해당 함수의 매개변수와 지역 변수가 변수 환경에 추가되고, 렉시컬 환경이 설정됩니다.



3. 스택 구조 : 자바스크립트는 실행 컨텍스트를 스택 구조로 관리합니다.

즉, 함수가 호출되면 새로운 실행 컨텍스트가 스택에 쌓이고, 함수 실행이 끝나면 해당 컨텍스트가 스택에서 제거됩니다.

이를 통해 자바스크립트는 함수 호출의 순서를 관리하고, 각 함수의 상태를 유지할 수 있습니다.

실행 컨텍스트의 종류 - 전역 실행 컨텍스트 : 코드가 실행될 때 가장 먼저 생성되는 컨텍스트입니다.

전역 변수와 함수가 포함됩니다.

- 함수 실행 컨텍스트 : 함수가 호출될 때마다 생성되는 컨텍스트로, 함수의 매개변수와 지역 변수가 포함됩니다.

- Eval 실행 컨텍스트 : eval() 함수가 호출될 때 생성되는 특별한 컨텍스트입니다.

eval()은 문자열로 작성된 코드를 실행하는 함수입니다.

결론 자바스크립트의 실행 컨텍스트는 함수의 실행과 관련된 모든 정보를 담고 있는 중요한 개념입니다.

이를 통해 자바스크립트는 스코프, 변수, this 바인딩 등을 관리하며, 함수 호출의 순서를 추적할 수 있습니다.

실행 컨텍스트의 이해는 자바스크립트의 비동기 처리, 클로저, 모듈화 등 다양한 고급 개념을 이해하는 데 필수적입니다.

작성자: 정민서 [비회원] | 작성일자: 1년 전 2024-09-10 08:36:58
조회수: 269 | 댓글: 0 | 좋아요: 0 | 싫어요: 0
내용이 부정확하다면 싫어요를 클릭해주세요.