모의 면접 때 받은 질문 follow-up Question
👤 : var let const의 차이점을 말해주세요
var는 함수 레벨 스코프
let, const는 블럭 레벨 스코프이다.
변수 선언
✅ var로 선언한 변수는 선언 전에 사용 가능
⛔️ let, const는 에러 발생
var, let, const, class, function 모두 hoisting 가능하다. 다만 var의 경우 호이스팅 되면서 초기값이 없어도 자동으로 undefined를 초기값으로 메모리에 할당된다. 그러나 let, const의 경우 hoisting이 되면서 초기값이 없으면 자동으로 초기값을 메모리에 할당하지 않는다. 선언 전에 메모리에 해당 변수가 존재하지 않는다.
변수가 선언되고 해당 변수에 값이 할당되기 전까지를 TDZ라고 함. Temporal Dead Zone의 약자로 변수가 만들어지지고 TDZ가 생성되지만 코드 실행이 변수가 실제 있는 위치에 도달할 때까지 엑세스 할 수 없음. let, const에 값이 할당되면 TDZ를 떠난 상태며 변수 사용할 수 있음.
변수명
✅ var는 이미 존재하는 동일한 변수명 선언 가능
⛔️ let, const는 에러 발생
초기값
✅ var, let은 변수 선언시 초기값 안줘도 됨
⛔️ const는 반드시 할당해야함
재할당
✅ var, let는 값을 재할당할 수 있음
⛔️ const는 한번 할당한 값은 변경할 수 없음(객체 속 프로퍼티 변경은 막지 못함)
벼누를 가리키는 값 자체를 변경하려고 하면 에러가 발생하지만 객체 내 프로퍼티의 추가, 변경, 삭제는 문제 없다.
만약 객체의 프로퍼티를 변경하고 싶지 않으면 Object.freeze()를 쓰면 된다
모의 면접 때 받은 질문 follow-up Question
👤 : scope에 대해 알려주세요
블록 스코프: 중괄호로 둘러 싸인 부분을 블록이라고 함
var a = 1; // 전역 스코프 function print() { // 지역(함수) 스코프 var a = 111; console.log(a); } print(); // 111 console.log(a); // 1
기존 var같은 경우 함수 스코프를 가졌기 때문에 함수 내에서만 지역 변수가 유지되는 문제가 있었지만 ES6이 등장한 다음부터 let, const 키워드가 추가되면서 함수가 일반 블록에서도 지역변수로 선안할 수 있게 됨
Reference:
https://medium.com/@yeon22
https://velog.io/@ehgks0000/Node-js-%EB%A9%B4%EC%A0%91%EC%A4%80%EB%B9%84