첫 질문은 '자바와 자바스크립트가 어떻게 다른가' 하는 자스와 전혀 상관 없는 질문이라 뺐다. (마치 '코와 코끼리가 어떻게 다른가')
키워드: 호이스팅, 스코프, 재할당
What is the difference between == and === operators?
값만 보느냐 타입까지 보느냐
What is the event loop in JavaScript?
자스는 호출 스택 하나 -- 비동기로 극복
브라우저 비동기 실행 로직: 이벤트 핸들러, 통신 함수, 타이머 함수
이 셋은 실행되면 브라우저 뒤편으로 던져져 콜백 큐로 이동한다.
호출 스택의 동기적 코드가 모두 실행되어 호출 스택이 비워지면
콜백 큐의 내용들을 호출 스택으로 이동시키는 이 메커니즘
What is a closure in JavaScript?
외부 함수가 종료되어도 내부 함수가 여전히 외부 함수의 지역 변수를 참조할 수 있는 현상
예: 리액트의 useState, for문에서 맨 마지막 값만 나오는 오류 해결
Explain the concept of prototypal inheritance.
프로토타입: 자스 인스턴스가 모두 갖고 있는 상위 개념의 인스턴스.
여기에 생성될 인스턴스들이 공통으로 갖게 될 상태와 메서드를 선언해두면
만들어지는 인스턴스마다 중복으로 선언할 필요가 없어진다.
What are the differences between call, apply, and bind?
셋 다 this의 명시적 바인딩을 위한 메서드
call은 컴마(인수를 하나씩 넘김), apply는 배열로 한번에 넘긴다.
또 call과 apply는 바인딩 후에 알아서 실행까지 해주지만 bind는 따로 실행을 안 해줘서 명시적으로 소괄호를 붙여 호출까지 해줘야 한다.
How does asynchronous programming work in JavaScript?
자스는 기본적으로 호출 스택이 하나
호출 스택이 하나라는 것은 원래 한번에 하나의 동작밖에 못 한다는 뜻
자스에서는 이거를 '비동기'라는 개념으로 해결하고 있다.
비동기는 순서가 보장이 안 되지만 먼저 완료되는 게 먼저 실행되어 blocking이 없다는 장점이 있다.
답에 있던 세 가지 개념: callback, Promise, async/await