var, let는 변수 const는 상수라고 불리며 데이터를 저장하기 위해 이름을 할당한 메모리 공간입니다. var는 재선언, 재할당이 모두 가능하며 함수 스코프로 함수 내에서 모든 변수에 접근이 가능합니다. var는 선언한 뒤 자동으로 초기화되어 undefined의 값을 부여받습니다. 반면에 let과 const는 블록 스코프로 블록 외부에서 접근이 불가능하며 초기화가 되기 전에 코드에 참조할 수 없습니다. let은 재선언이 불가능하지만 재할당은 가능하며 const는 재선언, 재할당 둘 다 불가능합니다. let과 const는 ES6에 새로 나온 문법으로 var를 사용할 때 오류를 찾기 어려운 점 때문에 let과 const의 사용을 권장합니다.
Promise는 특정 코드의 실행이 완료될때까지 기다리지 않고 다음 코드를 먼저 수행하는 자바스크립트의 특성을 가진 비동기 처리에 사용되는 객체입니다. 비동기 처리의 단점을 보완하여 동기적으로 처리할 수 있게 도와줍니다. CallBack 함수를 사용해서 비동기 처리를 해줄 수 있지만 가독성을 높이기 위해 만들어진 문법이며, 대기 상태인 pending, 처리가 완료되서 프로미스가 값을 반환한 상태인 fulfilled, 처리가 실패한 상태인 rejected 상태가 있습니다.
Hoisting은 코드가 실행하기 전에 변수선언과 함수선언이 해당 스코프의 최상단으로 끌어올려진 것 같은 현상을 말합니다. 호이스팅이 발생하는 이유는 자바스크립트 엔진이 코드를 실행하기 전에 실행컨텍스트가 생성이 되는데, 이 실행컨텍스트가 코드를 원활하게 실행될 수 있도록 만들어주는 역할을 합니다.
실행컨텍스트는 생성단계와 실행단계가 있습니다. 그 중 코드를 읽기 전 생성단계에서 자신의 스코프 내에 선언된 변수와 함수들을 미리 스코프내에 등록시키는 작업이 진행됩니다. 이 원리 때문에 호이스팅이라는 현상이 발생하게 되는 것입니다.
let과 const가 호이스팅이 된 것 같지 않은 이유는 초기화 단계 이전인 선언단계까지만 진행된 상태이므로 선언문을 만나기 전까지 변수를 사용할 수 없습니다.
Promise의 문법이 불편해서 나오게 된 개념입니다. async 함수가 실행되는 도중 await를 사용할 수 있고, await가 선언된 함수가 처리될 때 까지 기다린 다음 아래 코드가 실행되게 됩니다. 지금까지는 async함수 내에서만 await를 선언할 수 있었는데, ECMAScript 2022이후 최상단 스코프에서 await를 실행할 수 있게 되었습니다.