-
Notes from reading 🔖 You Don't Know JS Yet - 1JavaScript 2025. 4. 16. 18:45
- 자바스크립트를 모두 이해하고 알 수 있다고 생각하는 것은 잘못되었다 -> 꾸준히 배워나가고 익혀야 한다
- 결과를 중시하고 과정에 대한 생각을 멈추면 안된다 (인내심이 중요)
- 언어에 대한 이해도가 중요 😀
## 챕터 1
- 자바스크립트의 정복은 있을 수 없으므로, 목표가 되어서도 안됨
- 자바스크립트는 자바랑은 사실 관련이 없다. (자바와 스크립트가 붙은 건 마케팅을 위함이었다...)
- 요즘엔 JS라는 이름으로 자바스크립트를 호칭하려는 흐름이 있다는 듯
- ECMA 국제 표준화 기구에 의해 공식화된 JS의 명칭은 ECMAScript이다. (16년도부터 해당 명칭 뒤에 개정 연도가 붙는다)
- 자바스크립트의 공식 명세서는 TC39 (JS를 관리하는 TSC, 기술 운영 위원회) 에서 관리한다.
- TC39 정기 모임에서 명세 변경 안건에 대해서 투표를 하고 합의가 되면, ECMA에 제출한다.
https://ecma-international.org/publications-and-standards/standards/ecma-262/
ECMA-262 - Ecma International
ECMAScript® 2024 language specification, 15th edition - ECMAScript is a programming language based on several technologies like JavaScript.
ecma-international.org
- TC39는 브라우저를 만드는 조직과 하드웨어 제조사 같이 웹에 투자를 많이 하는 회사들이 포함된다고 한다 (구글 애플 삼성 모질라 등)
- 제안들은 5단계의 절차를 거치고 모든 제안은 깃헙에서 확인할 수 있다.
https://github.com/tc39/proposals
GitHub - tc39/proposals: Tracking ECMAScript Proposals
Tracking ECMAScript Proposals. Contribute to tc39/proposals development by creating an account on GitHub.
github.com
- 여기서 제안에 대한 토론은 모두가 자유롭게 참여 가능하다.
- JS에는 버전이 없고, 단 하나의 표준, 명세만 TC39, ECMA에 의해 관리된다.
- 이 명세를 바탕으로 JS 구현체가 만들어지고 브라우저 엔진에 쓰인다. (명세의 규칙을 어기면 안된다)
- 때때로 브라우저 엔진에서 충돌/불일치가 발생하고, 이 경우 결정된 사항이 철회되고 다시 명세서를 웹에 맞추는 경우가 있다.
https://developer.chrome.com/blog/smooshgate?hl=ko
SmooshGate FAQ | Blog | Chrome for Developers
SmooshGate는 표준 개발과 웹 플랫폼에 관해 어떤 점을 배울 수 있나요? 이 글이 개요를 제공합니다.
developer.chrome.com
- 되도록 명세서에 구현된 내용만을 사용하여 개발하는 게 좋다.
- alert와 같은 문법은 JS지만 JS가 아닌 웹 전용 문법이다. (alert는 Node에서는 사용하지 못함)
- 사실 console.*도 명세서에 없는 메서드
- 사실 alert나 console은 명세서에 없는 구현인데, JS 처럼 작동하는 것
- 개발자 도구(콘솔)는 JS의 프로그램 처리방식을 항상 엄격하게 준수하지는 않는다. (기대하면 안된다)
- JS는 다중 패러다임 언어 (절차적, 객체, 함수형 스타일 코드 모두 가능)
- JS를 지탱하는 기본 원칙은 하위 호환성이다 -> 한번이라도 유효했던 문법은 계속 인정되고 그 유효성이 깨지지 않는다. (명세서가 변해도)
- 하위 호환성을 깨는 예외가 없는 건 또 아니다
- JS는 상위 호환성은 보장하지 않는다. (HTML, CSS 역으로 상위 호환성 보장 & 하위 호환성 보장 X)
- ES2019로 작성된 문법은 2016년 엔진에서 작동 불가능 -> 간극을 줄이기 위한 노력으로 transpile을 통해 호환성 문제 해결 (이것이 바로 트랜스파일러 babel ♥️)
- 아직 지원하지 않는 API 메서드 때문에 문제가 발생했다면 폴리필, 심(shim)을 도입한다. (해당 메서드가 있는 것 처럼 구현해주기) -> 트랜스파일러가 자동으로 처리해주는 작업이기도 함
- 개발 환경에서는 트랜스파일러나 폴리필이 필수적으로 필요하다. (환경과 앱, JS 최신 기능의 간극을 매꾼다 🍹)
- 스크립트/인터프리터 언어는 코드가 위에서부터 아래로 한줄씩 실행된다
- 파싱을 하는 언어는 코드 전체가 한번 변환되기에 실행되기 전에 초기 에러가 날 수 있다 (파싱의 결과는 AST, 추상 구문 트리)
- JS는 파싱을 거치는데 파싱 후 이진 바이트 코드가 되어 VM에 전달된다.(이 과정에서 JIT 컴퍼일러가 작동해 최적화 진행)
- 웹어셈블리(Wasm)는 JS가 주력이 아닌 개발자도 JS엔진에서 돌아가는 코드를 쉽게 작성할 수 있도록 하기 위함이다
- Wasm은 파싱, 컴파일 없이 처리된다.
- Wasm을 통해서 웹에서 할 수 있는 것들의 확장이 일어나지만, 그렇다고 JS를 대체한다는 것은 아니다.
- 엄격모드는 ES5에서 추가되었으며 좋은 JS 코드 작성을 위한 가이드를 제공해준다.
- 엄격모드는 초기오류를 잡아내는데 특화되어 있다.
- "use strict";로 활성화가 가능하다.
- 엄격모드는 함수 단위로도 사용 가능하다.
- ES6 모듈로 작성한 모든 코드들은 기본이 엄격 모드이다. (자동으로 엄격모드 준수. 이젠 사실상 기본이다 🍕)
+ HTML og protocol 공식문서 (ydksjy 책과는 관계없이 알게되었는데, 기록용... 🤣)
'JavaScript' 카테고리의 다른 글
Notes from reading 🔖 You Don't Know JS Yet - 3 (0) 2025.05.27 Notes from reading 🔖 You Don't Know JS Yet - 2 (0) 2025.05.14 JS UI 라이브러리를 instance로 만들어 React 이식하기 (with useImperativeHandle & Tui Grid) 💘 (0) 2025.04.01 Input 이벤트에서 한글 처리하기. event.isComposing이란? (한글 두 번 입력 방지 😸) (6) 2025.03.12 JavaScript로 shell 스크립트 작성하기 😎 Google’s zx 라이브러리 (0) 2025.01.22