Node.js 공부기록 (6) 모던 자바스크립트, let 과 const
모던 자바스크립트
비영리 기구 Ecma International은 JavaScript를 포함한 다양한 기술 표준 정립을 목적으로 하는 단체임
그 중 TC39 위원회(committee)는 자바스크립트(ECMAScript) 표준 제정을 담당함
이 위원회에는 MS, Google, Apple 등 웹 기술과 관계가 깊은 거대 기술 벤더들이 참여함
ECMAScript == JavaScript
(에크마스크립트는 자바스크립트의 기술적인 표준을 뜻함
상표권 문제로 자바스크립트라고 부를 수 없는 것이지, 에크마스크립트는 자바스크립트라고 보면 됨.)
대부분의 논의는 github에 공개되어 있음
https://github.com/tc39 에서 People을 클릭하면 위원회 인원들을 볼 수 있음 (자바스크립트 표준 제정 일을 하심)
https://tc39.es/process-document/
* The TC3 Process
Stage 0 (Strawperson) – 누구나 제출은 가능함. 초안에 해당됨
Stage 1 (Proposal) – 여기서부터 좀 의미가 있는데, 이끌어갈 챔피언을 선정함. 폴리필, 데모 등이 필요함
Stage 2 (Draft)
Stage 3 (Candidate)
Stage 4 (Finished) – 거의 모든 브라우저에 적용된 상태
뒤로 갈 수록 성숙한 상태라고 보면 됨
어떤 프로포절들이 있는지 살펴보자. 아래 리파지토리 참고
https://github.com/tc39/proposals
자바스크립트 라는 언어가 어떻게 진화하고 있는지 과정을 퍼블릭하게 조회 가능함
https://node.green/ 에서 Node의 각 버전별로 지원하는 ECMAScript 기능을 확인 가능함
—–
<let, const>
let taste = ‘hot’
let food = ‘chicken’
const dish = `${taste} ${food}` // ‘hot chicken’
hoisting 규칙이 없고, block scoping을 지원함.
따라서 var보다 훨씬 에측 가능한 코드를 짤 수 있게 해줌
* const : constant(상수)에서 따온 단어
* let은 레퍼런스가 바뀔 수 있고, const는 바뀔 수 없음
let x = 1
x = 2 // OK
const y = 1
y = 2 // Uncaught TypeError: Assignment to constant variable.
* var와는 달리 let과 const는 같은 스코프 내에서 같은 변수를 두 번 이상 정의할 수 없음
var x = 1
var x = 2 // OK
let x = 1
let x = 2 // Uncaught SyntaxError: Identifier ‘x’ has already been declared
* var 와는 달리 let과 const는 변수를 정의하기 전에는 사용할 수 없음
console.log(x) // undefined
var x = 0
console.log(x) // ReferenceError: Cannot access ‘x’ before initialization
const x = 0
* block scoping
(let 과 const는 block scoping rule을 따름.
var 는 function scoping rule을 따름)
var x = 1
{
var x = 2
console.log(x) // 2
}
console.log(x) // 2
const x = 1
{
const x = 2
console.log(x) // 2
}
console.log(x) // 1
* let과 const의 예측 가능성과 유지보수성이 var보다 훨씬 뛰어남
* 가능하다면 const만 쓰고, 필요한 경우에 한해 let을 쓰고, var는 절대 쓰지 말것