* 이 포스팅은 패스트캠퍼스 "Nodejs" 강의를 듣고 공부한 요약내용임
1. Event Loop
자바스크립트는 여러개의 스레드를 사용하지만 메인스레드는 하나만 사용하고 해당 메인스레드로 자바스크립트를 실행한다.
그러므로 실행 컨텍스트는 하나이며 그 외의 일(File I/O, Network 등)은 워커스레드가 처리한다.
워커스레드는 여러개가 있을 수 있다.
이러한 자바스크립트의 이벤트 루프에 기반한 동시성 모델은 실행 컨텍스트를 하나로만 동작하도록 하여 데이터의 동시성 제어를
용이하게 해준다.
- Call stack
지금까지 불린 함수들을 call stack에 쌓아둔다.
이벤트루프가 다음 콜백을 처리하려면 지금 실행하는 콜백이 실행되어야 한다.
이러한 과정을 call stack이 끝날 때까지 처리함 - Callback Queue
메시지 큐라고도 불리며 실행될 콜백들을 쌓아둡니다.
콜백은 이벤트 발생 시 메인 스레드에 알리기 위해 사용되며 콜 스택이 비어야 실행됩니다. - non-blocking I/O & offloading
무거운일들은 워커스레드에 맡기고 동작이 끝나면 callback queue에 등록합니다.
브라우저나 Node가 요청받은 일을 하는동안 메인스레드나 이벤트루프는 영향 받지 않고 계속 실행됩니다. (offloading)
2. Scope, hoisting
- hoisting
var : 변수선언 시 맨 위로 올라감. ( 단, 초기화값은 인식하지 않음. 선언 효과만 있음 ) - lexical scope
inner scope에서 outer scope의 변수로 접근이 가능함. ( 밖에서 안은 접근이 불가함 ) - block scope
var는 대상이 아님. (새로운 변수로 인식함)
let과 const는 block scoping의 대상임
3. closure
closure = function + environment ( 함수를 둘러싼 접근할 수 있는 모든 스코프를 뜻함 )
function당 한개씩 생김
4. prototype
'상속' 시에 사용됨
__proto__ : 인스턴스(클래스)가 기본적으로 가지는 상속 체인. 상속 체인은 부모를 가리킴
.prototype."상속시키고싶은 속성" = "정의하기"
'Javascript' 카테고리의 다른 글
[ Javascript ] 스트림 (0) | 2021.07.30 |
---|---|
[ Javascript ] 모던 Javascript 알아보기 (0) | 2021.07.30 |
[ Javascript ] 기본 도구 : linter, formatter, prettier (0) | 2021.07.29 |