Modern JS Deep Dive 읽기
:: 프로그래밍
요구사항을 분석하여 적절한 자료구조와 함수의 집합으로 변환하고 흐름을 제어하는 것
::: 작업분석
코드로 작성할 수 있게 요구사항을 정확하고 상세하게 설명하기
- 복잡한 작업을 단순한
작업
으로 나누기
- 필요한
데이터
를 정리하고 분류하기
행위
를 순서에 맞게 배열하기
:: 변수, Variables
데이터를 저장하기 위해 확보한 메모리 공간으로 식별자를 붙여 관리한다
::: 식별자, Identifier
- 식별자는 값이 아니라 메모리 주소를 기억한다
- 메모리 상에 존재하는 값을 식별할 수 있는 이름은 식별자다(변수, 함수, 클래스...)
- 모든 식별자는 JS 실행 컨텍스트(execution context)에서 관리한다
::: 작동방식
:::: 선언, Declation
- 런타임 이전, JS엔진이
식별자
에 확보한 메모리
공간의 주소를 연결
하는 작업
:::: 초기화, Initialization
- 런타임 이전, 메모리의 쓰레기 값을 제거하기 위해
undefined
값을 저장
하는 작업
:::: 대입, Assignment
- 런타임, 초기화된 변수에
데이터
를 저장
하는 작업
:::: 호이스팅, Hoisting
- 런타임 이전에 코드의 선두로 끌어올려진 것처럼 처리하는 작업
- 모든 식별자는 호이스팅 처리된다(var, let, const, function, class...)
:::: var, let, const 비교하기
- var 경우는 호이스팅 후에 바로 undefined 초기화
- let, const 경우는 값을 대입하기 전에는 사용 불가(TDZ, Temporal Dead Zone)
- let 경우는 재할당이 가능한 변수지만, const 경우는 재할당이 불가능한 변수
::: 이름 짓는 규칙, Naming convention
const firstName;
const first_name;
const FirstName;
const strFirstName;
- 일반적으로 변수/함수 이름에는 카멜 케이스, 클래스 이름에는 파스칼 케이스 사용
:: 표현식과 문, expression and statement
::: 값, value
식이 평가되어 생성된 결과
::: 리터럴, literal
값을 생성하는 표기법
::: 식, expression
새로운 값을 생성하거나 기존 값을 참조하는 표현
::: 문, statement
최소 실행 단위 = 컴퓨터에게 내리는 명령