This page was translated from English by the community. Learn more and join the MDN Web Docs community.

View in English Always switch to English

호출 스택

호출 스택은 여러 함수들(functions)을 호출하는 스크립트에서 해당 위치를 추적하는 인터프리터 (웹 브라우저의 JavaScript 인터프리터같은)를 위한 메커니즘입니다. 현재 어떤 함수가 실행중인지, 그 함수 내에서 어떤 함수가 호출되어야 하는지, 등을 제어합니다.

  • 스크립트가 함수를 호출하면, 인터프리터는 이를 호출 스택에 추가한 다음 함수를 실행하기 시작합니다.
  • 해당 함수에 의해 호출되는 모든 함수는 호출 스택에 추가되고 호출이 도달하는 위치에서 실행합니다.
  • 현재 함수가 끝나면, 인터프리터는 스택을 제거하고 호출 스택 마지막 코드 목록에서 중단된 실행을 다시 시작합니다.
  • 스택이 할당된 공간보다 많은 공간을 차지하면, "stack overflow" 에러가 발생합니다.

예제

js
function greeting() {
  // [1] 일부 코드가 들어갑니다.
  sayHi();
  // [2] 일부 코드가 들어갑니다.
}
function sayHi() {
  return "Hi!";
}

// `greeting` 함수를 호출합니다.
greeting();

// [3] 일부 코드가 들어갑니다.

위 코드는 다음과 같이 실행될 것입니다.

  1. greeting() 함수에 도달할 때까지, 모든 함수를 무시합니다.

  2. greeting() 함수를 호출 스택 리스트에 추가합니다.

    참고 : 호출 스택 리스트. - greeting

  3. greeting 함수 내부의 모든 코드를 실행합니다.

  4. sayHi() 함수를 호출합니다.

  5. sayHi() 함수를 호출 스택 리스트에 추가합니다.

    참고 : 호출 스택 리스트. - sayHi - greeting

  6. sayHi() 함수의 끝에 도달할 때까지, 함수 내부의 모든 코드를 실행합니다.

  7. sayHi() 가 호출된 라인으로 돌아와 greeting() 함수의 나머지를 계속 실행합니다.

  8. 호출 스택 리스트에서 sayHi() 함수를 제거합니다.

    참고 : 호출 스택 리스트. - greeting

  9. greeting() 함수 내부의 모든 코드가 실행되었을 때, 이를 호출한 라인으로 돌아와 JS 코드의 나머지를 계속 실행합니다.

  10. 호출 스택 리스트에서 greeting() 함수를 제거합니다.

참고 : 호출 스택 리스트. EMPTY

요약하면, 우리는 빈 호출 스택으로 시작하였습니다. 함수를 호출할 때마다 자동으로 호출 스택에 추가되고, 해당 코드가 모두 실행된 후, 호출 스택에서 자동으로 제거됩니다. 결국, 마찬가지로 빈 호출 스택으로 끝납니다.

같이 보기