
함수의 실행 절차
아래의 예시 코드에서 console.log()의 인자가 출력되는 내용을 통해 함수의 실행 절차를 알아보자.
var a = 1;
function outer() {
console.log(a); // 1
function inner() {
console.log(a); // undefined
var a = 3;
}
inner();
console.log(a); // 1
}
outer();
console.log(a); // 1위와 같은 코드가 있을 때 내부적인 실행 절차는 다음과 같다.
- 전역 실행 컨텍스트 생성
- 전역 변수
a선언(호이스팅) - 외부 함수
outer선언(호이스팅) - 변수
a에 1 할당 outer함수 호출 및outer실행 컨텍스트 생성- 함수
inner선언(outer스코프에서 호이스팅) outer스코프에서a탐색하지만 찾을 수 없으므로 전역 스코프에서 재탐색 후 1 출력- 중첩 함수
inner호출 및inner실행 컨텍스트 생성 - 지역 변수
a선언(inner스코프에서 호이스팅) inner스코프에서a탐색 후 출력하지만 호이스팅만 된 단계이므로undefined출력- 지역 변수
a에 3 할당 inner실행 컨텍스트 종료- 제어권이
outer실행 컨텍스트로 돌아오며 전역 스코프에서 변수a탐색 후 1 출력 outer실행 컨텍스트 종료- 전역 스코프에서 변수
a탐색 후 1 출력