자바스크립트가 함수 호출을 핸들링하는 방법 중 하나이다.
자바스크립트는 실행할 함수가 있으면 스택위에 올린다.
이렇게 생긴 구조가 스택이다.
자바스크립트는 실행할 함수들을 스택에 올리고, 실행한 함수가 끝나면 스택에서 제거한다.
코드가 이렇게 있으면 스택은 어떻게 쌓이게 될까?
이런식으로 쌓이게 될 것이다!
먼저 zero
를 발견하고, 스택에 쌓는다.
그런데 zero
함수 내부에서 one
을 발견하고, one
을 스택에 쌓는다.
같은 원리로 two
, three
를 차례대로 쌓고, console.log("hello")
를 마지막으로 쌓는다.
이제 스택에 쌓을 함수를 다 찾았으므로, 맨 위에서부터 함수를 실행한다.
이 과정은 코드와 함께 살펴보도록 하자!
먼저, console.log()
함수가 실행되고, 그 다음 쌓여있는 three
가 실행된다.
three
내부에 실행할 것이 없으므로 three
함수도 호출이 끝난다.
다른 함수들도 마찬가지다.
그러면, 다음과 같은 코드는 어떤흐름으로 실행되게 될까?
위에서 서술했던 흐름과 똑같다.
console.log()
를 시작으로 one
까지 스택이 차례로 제거된다.
이때, one
까지 스택이 제거되고, 그 다음 줄 throw Error("Error!"); 을 실행하게된다.
그 다음 zero()
가 콜 스택에서 제거된다. (함수 실행이 끝났으니까)
참고