Javascript

[ Javascript ] 자바스크립트 언어 기초 이론

noahkim_ 2021. 7. 30. 10:54

* 이 포스팅은 패스트캠퍼스 "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."상속시키고싶은 속성" = "정의하기"