javascript에서 호이스팅은 변수 선언과 함수 선언이 그들이 속한 스코프의 최상단으로 끌어올려지는 것을 의미합니다. 호이스팅은 javascript엔진이 런타임 이전에 일어납니다. 호이스팅에의해 변수 선언, 함수 선언 전에 사용할 수 있지만 이는 개발자가 의도한 부분이 아닐것이기에 어플리케이션에 오류를 발생시킬 확률이 높습니다.
하지만 ES6에서 추가된 let, const는 호이스팅이 일어나지만 TDZ(temporal Dead Zone)에의해 변수가 선언되기 전에는 참조오류를 발생시킵니다.
동기는 작업이 순차적으로 진행하며 (코드가 순차적으로 실행되는 것을 말한다.) 비동기는 한 작업이 끝나지 않아도 다음 작업을 진행합니다.
자바스크립트는 싱글 스레드 언어입니다. 싱글 스레드라는 말은 자바스크립트가 한번에 하나의 작업만을 처리할 수 있다는 것입니다. 모던 웹페이지는 많은 정보를 담고있는데 자바스크립트가 싱글 스레드여서 하나하나 처리하면서 로딩을 한다면 많은 데이터를 불러오는 부분에서 굉장히 많은 시간을 소요하게되며 사용자 경험에 악영향을 끼칩니다. 이럴 떄 비동기를 사용하면 무거운 작업은 제쳐두고 동기적 코드를 먼저실행함으로서 사용자 경험을 극대화 할 수 있습니다.