함수 호출은 콜 스택을 쌓고, 변수 탐색은 스코프 체인을 따라간다
실행 순서와 이름 탐색은 다른 축이다. 호출은 스택에 쌓이고 변수는 현재 환경에서 바깥 환경으로 찾는다.
| 축 | 설명 | 따라가는 방향 | 헷갈리는 지점 |
|---|---|---|---|
| Call stack | 함수 실행 순서 관리 | 호출된 함수가 위에 쌓임 | 호출이 끝나면 제거됨 |
| Scope chain | 식별자 이름 탐색 | 현재 스코프에서 바깥으로 이동 | 호출 위치가 아니라 선언 위치 기준 |
| Parameter | 호출 시 전달된 값 | 함수 안 지역 변수처럼 사용 | 원시값과 참조값 차이 |
| Return | 호출자에게 결과 전달 | 스택을 한 단계 되돌림 | 반환 없는 함수는 undefined |
| Closure | 끝난 바깥 함수의 변수를 기억 | 렉시컬 환경 보존 | 공유 상태 변경 주의 |
함수 디버깅은 실행 순서의 콜 스택과 이름 탐색의 스코프 체인을 분리해서 봐야 한다.