[
js
]
You Don’t Know JS Yet
js 실행 과정
- transpile, budling, js엔진에게 전달
- js 엔진에서 파싱하여 추상 구문 트리로 바꿈
- 추상 구문 트리를 이진 바이트 코드로 바꿈
a. JIT 가 작동하여 최적화 진행 - js 가상 머신이 프로그램 실행
엄격 모드
- strict mode는 할 수 없는 것에 제약을 두는 모드가 아니라 최적화하고 효율적으로 실행할 수 있게 해주는 모드
값
- 원시 타입(primitive type)과 객체 타입(object type)
- 원시 타입
- 리터럴(literal)을 사용해 프로그램에 값을 주입함
- null, undefined의 사용은 자료마다 의견이 다름.
- 여기서는 비어있는 단일 값 표기시 undefined를 사용하는 것이 안전하다고 함
- symbol은 사람이 추측할 수 없게 만든 특수한 숨김 값
- 객체 타입
- 배열에는 원시 타입, 객체 타입과 상관없이 모든 타입의 값이 들어갈 수 있음
변수
- var: function scope 접근 범위
- let: 변수 접근 범위 (block scope)
- const: let과 유사, 선언되는 순간에 값을 할당, 나중에 다른 값을 재할당할 수 없음
- 재할당을 못함. 값을 바꿀 수는 있음
함수
- js에서 함수는 procedure의 의미
- 함수 선언문(function declarration), 함수 표현식(function esprerssion)
- 선언문은 코드 실행전까지 식별자와 관계를 맺지 않음
- 매개변수(parameter)를 통해 입력을 받음
- return 키워드를 사용하여 함수에거 값을 반환
비교
- 일치 비교(equality comparison), 동등 비교(equivalence comparison)
- js에서는 객체끼리 비교할 때 독자성 일치(identity equality)를 비교
- 다른 언어들은 비교 대상이 객체인 경우에는 값의 본질이나 내용이 아닌 구조적 일치(structural equality)를 비교
- 참조(독자성)를 대상으로 일치 비교