Skip to content

0728

시간이 ㄹㅇ 넘 빠르다.......................

어제 공부한거 오늘 보면 까먹고 오늘 공부한거 내일보면 까먹고
ㅋㅋ

JS

실행 컨텍스트

자바스크립트 코드는 총 3가지 종류로 나눌 수 있음

  1. 글로벌 코드 (Global Execution Context, GEC)
  2. 함수 코드 (Function Execution Context, FEC)
  3. eval 코드
  • 엔진이 자바스크립트 파일을 실행하기 전(코드가 런타임에 들어가기 전, 컴파일 됐을 때)에 글로벌 코드가 생성되고 함수를 호출할 때마다 함수가 생성된다.
    • 자바스크립트 엔진이란 뭔가?
      • 자바스크립트 코드를 해석하고 실행하는 프로그램 (V8, JavaScriptCore ...)
      • 파싱 -> 컴파일 -> 실행
    • 자바스크립트 호스트 환경이란 뭔가?
      • 애초에 호스트 의미가 뭐임? 주인이잖슴. JS를 실행 가능하게 해주는 주인.. 자바스크립트가 실행되는 환경.
  • 실행 컨텍스트와 콜스택
    • 자바스크립트 코드가 실행되면 실행 컨텍스트가 생기고 이는 콜스택에 쌓인다.
    • GEC 코드는 코드가 실행되기 전에 콜스택에 쌓였다가 모든 코드가 실행된 후 마지막에 제거된다.
      • 이 때 모든 코드란게 함수 코드랑 eval 코드를 다 포함하는가? ㅇㅇ
    • FEC는 호출할 때 쌓이고 호출이 끝나면 제거된다.
    • 아 이래서 상수는 GEC에다 선언하는게 메모리량을 줄일 수 있다고 한거구나
    • 왜냐면 반복되는 값인데 함수 안에다 여러번 선언하면 함수가 호출될 때마다 해당 변수의 값을 재생성할테니까.
  • 실행 컨텍스트 구성요소
    • Lexical Environment
      • Environment Record: 변수/ 함수 정보 저장 (let, const)
      • Outer Lexical Environment Reference: 상위 스코프를 가리킴
    • Variable Environment
      • var가 여기에 저장됨. 지금은 대부분 Lexical에 통합
    • this 바인딩
      • 해당 컨텍스트에서 가리키는 값.
  • Q. Lexcial Environmnet는 왜 Lexical Environment일까
    • 자바스크립트는 코드가 작성된 시점에 스코프가 결정된다.
      • => 이건 모든 언어의 특징 아닌가..? 했는데 Bash shell이나 옛날 언어들은 Dynamic Scope였다고함 ㄷㄷ
    • Lexical이란 "어휘적", "정적인" 이란 뜻을 갖고있음.
    • 그니까 결론적으로 코드가 "어디서" 정의 됐는지가 중요한거니까 lexical이라 부르는거임.
Pasted image 20250728121429

이벤트 루프

  • 실행 컨텍스트는 콜스택에 쌓이고

  • 콜백함수는 큐에 저장하고

  • 힙에는 동적 메모리를 저장한다

  • 콜 스택에 실행할 코드(Execution Context)가 있으면 실행하고

  • 콜 스택이 비어있으면 Callback Queue에 있는 콜백함수를 하나씩 꺼내서 콜스택에 넣어서 실행하는 과정을 반복

  • 자세한건 0704 til

호이스팅

함수를 선언하기도 전에 호출을 하고, 그 뒤에 함수를 선언해도 알아서 해당 함수를 호출해줌.
Pasted image 20250728141741