JS basic) call stack, closure [패스트캠퍼스 챌린지 4일차]

JS basic) call stack, closure [패스트캠퍼스 챌린지 4일차]

JS의 실행 모델은 event loop, call stack, callback queue 로 이루어진다.

1) Event loop

이것은 여러 스레드를 사용하는데, 우리가 코드를 실행한 스레드가 메인 스레드다. 하나의 노드 프로세스에서 메인 스레드는 하나 ( 즉 순간에 한 줄만 실행)인데, 다른 일을 하는 워커 스레드는 여럿이 있을 수 있다.

2) Call stack

지금 시점까지 불린 함수들의 스택이다. 이것은 아래에서 위로 차곡차곡 쌓였다가 위에서부터 하나씩 빼는 자료구조를 일컫는 데 사용되는 스택이다.

다음 콜백을 처리하기 위해서는 아래 그림처럼 현재 처리하고 있는 콜백의 실행이 완전히 끝나야 한다. 그 전에는 다음 콜백을 처리하지 않는 것이 특징이다. 이를 Run-to-Completion 이라 부른다.

3) Callback Queue

큐는 맨 처음 들어온 것이 맨 처음 나가게 된다. 이 콜백 큐는 메시지 큐라고도 부르는데, 콜백은 브라우저나 노드가 어떤 일이 발생하면, 메인 스레드에 이를 알려주기 위해 콜백을 넣어주는 식으로 사용이 된다. 여기서 이벤트는 가령 파일 처리가 완료되거나 타이머를 호출하는 경우 등이 있다.

4) Closure = function + environment

클로저는 함수가 하나 생길 때 마다 하나씩 생긴다. 여기서 환경은 함수 자신을 둘러싼 접근 가능한 모든 영역이다.

위 예를 보자. 위 예에서, dogAnd의 클로저는 함수: print 이고, 환경은 x->'dog' 이다. 클로저는 고차 함수를 만들 때 유용하다. MDN에서는 이 클로저를 아래 같이 설명한다:

클로저는 독립적인 (자유) 변수를 가리키는 함수이다. 또는, 클로저 안에 정의된 함수는 만들어진 환경을 ‘기억한다’.

https://bit.ly/3FVdhDa

본 포스팅은 패스트캠퍼스 환급 챌린지 참여를 위해 작성되었습니다.

from http://jysden.tistory.com/70 by ccl(A) rewrite - 2021-11-04 19:00:38