
call은 함수의 call에서 call, 즉 함수의 호출을 의미한다. 스택은 자료 구조의 큐와 스택에서 스택을 의미한다.
함수가 실행되기 위해서는 함수를 메모리에 먼저 올리게 된다. 이때 함수의 호출 관련 정보들이 스택 구조에 쌓이게 된다. 이 곳이 함수를 사용할 때마다 그와 관련된 정보들이 쌓이는 곳, 콜 스택(Call Stack)이다.

추가 - 함수 호출 시 해당 함수의 실행 컨텍스트가 스택에 추가(push) 된다.
제거 - 함수 실행 완료 시 해당 컨텍스트가 스택에서 제거(pop) 된다.
중첩 함수 - 중첩 함수 호출 시 호출 순서대로 스택에 쌓이게 된다. 예를 들어 함수가 A1 → A2 → A3로 연결되어 있다면, A3가 가장 처음 스택에 추가, 이후로 A2, A1가 추가 된다.
함수가 호출되면 스택에는 함수의 매개변수, 호출이 끝난 뒤 돌아갈 반환 주소값, 함수에서 선언된 지역 변수 등이 저장된다. 이렇게 스택 영역에 차례대로 저장되는 함수의 호출 정보를 스택 프레임(stack frame)이라고 한다. 각 함수는 실행될 때마다 스택에 새로운 스택 프레임을 쌓고, 함수 실행이 끝나면 해당 프레임은 스택에서 제거된다.
스택 프레임의 정보는 스코프(scope)와 관련이 있다. 스코프는 함수 실행 시 그 함수에서 접근할 수 있는 변수나 함수의 범위를 의미하며, 각 함수 호출에 대한 실행 정보를 담고 있는 스택 프레임을 이해하는 데 중요한 역할을 한다.
4️⃣-1️⃣ 스코프(scope)
스코프는 코드 내에서 변수, 함수, 객체 등이 유효한 범위를 의미한다.
스코프의 종류:
전역 스코프 (Global Scope): 코드의 가장 바깥 영역에서 선언된 변수로 어디서든 접근할 수 있다.
함수 스코프 (Function Scope): 함수 내에서 선언된 변수는 해당 함수 내에서만 접근할 수 있다.
블록 스코프 (Block Scope): let이나 const로 선언된 변수는 블록(중괄호) 내에서만 유효하다.
4️⃣-2️⃣ 스코프 체인 (Scope Chain)
스코프 체인은 중첩된 함수에서 외부 함수의 변수에 접근할 수 있도록 하는 메커니즘이다. 함수가 호출될 때마다 스코프 체인이 생성되고 현재 함수 스코프에서 시작해 상위 함수 스코프까지 차례로 탐색하면서 변수에 접근한다.
스코프 체인의 동작 방식
4️⃣-3️⃣ 스택 프레임과 스코프, 스코프 체인의 관계

에러 버블링은 함수에서 발생한 에러가 콜 스택을 따라 상위 함수로 전파되는 현상이다.
위의 사진에서는 F4에서 발생한 에러가 상위 함수로 전파되고 있고 이를 상위 함수 F2에서 에러 포착을 하는 것을 나타내고 있다.
이는 에러를 포착하는 함수가 중간에 존재하지 않다면 포착되지 않은 에러는 스택 최상위까지 전파 되어 프로그램이 중단 될 수 있음을 의미한다. 이러한 상황을 방지하기 위하여 적절한 에러 처리 로직을 가질 수 있도록 해야한다.