내일배움캠프 TIL

(var, let, const), (Promise) 본캠프 TIL 02/10

parkcw0325 2025. 2. 10. 20:33

3차 모의면접의 면접카타 50문제를 하루에 2문제씩 정리하도록 하겠습니다!

 

1 번째 질문 (var, let, const)에 대하여 설명하시오. 

 

요소별 상세 설명

 

스코프 (Scope)

var: 함수 레벨 스코프 (함수 내에서 선언되면 함수 내에서만 유효)

let, const: 블록 레벨 스코프 ({} 내에서 선언되면 블록 내에서만 유효)

호이스팅 (Hoisting)

var: 선언 단계와 초기화 단계가 동시에 발생 (값 할당 전 undefined로 초기화).

let, const: 선언 단계와 초기화 단계가 분리되어, 스코프 시작 지점에서 선언은 되지만 초기화는 실제 코드 위치에서 발생.
→ TDZ (Temporal Dead Zone) 구간에서 참조 시 오류 발생.

재할당 및 재선언

var: 재선언 가능, 재할당 가능.

let: 재선언 불가능, 재할당 가능.

const: 재선언 불가능, 재할당 불가능 (단, 객체 내부 프로퍼티는 수정 가능) -- 배열이나, 객체의 경우 안의 밸류 값은 수정 가능

 

if (true) {
  var varVar = "var";
  let letVar = "let";
  const constVar = "const";
}
console.log(varVar); // "var" (정상)
console.log(letVar); // ReferenceError (블록 밖 접근 불가)

 

2. Promise란 무엇인지 설명

 

요소별 상세 설명
정의: 비동기 작업의 완료(성공/실패) 를 나타내는 객체.

목적: 콜백 지옥(callback hell)을 해결하고 가독성 있는 코드 작성 가능.

상태

   ---pending: 초기 상태 (미완료).

   ---resolve: 작업 성공.

   --- rejected: 작업 실패.

메서드:

.then(): 성공 시 실행.

.catch(): 실패 시 실행.

.finally(): 성공/실패 여부와 무관하게 실행.

 

const promise = new Promise((resolve, reject) => {
  setTimeout(() => resolve("성공!"), 1000);
});

promise
  .then(result => console.log(result)) // "성공!"
  .catch(error => console.log(error));

 

예상 꼬리질문 & 대답

 

1. var, let, const 관련

 


Q1. TDZ(Temporal Dead Zone)가 무엇인가요?

A: let/const가 선언되기 전에 접근을 막는 구간으로, 초기화 전 변수 참조 시 ReferenceError가 발생합니다.

Q2. const로 선언된 객체의 프로퍼티를 수정할 수 있는 이유는?

A: const는 재할당을 금지할 뿐, 객체의 내부 값 변경은 허용하기 때문입니다.

Q3. var의 호이스팅과 let의 호이스팅 차이는?

A: var는 선언과 동시에 undefined로 초기화되지만, let은 초기화되지 않은 상태로 호이스팅되어 TDZ가 생깁니다.

 

 

2. Promise 관련

 


Q1. Promise 체이닝(Promise Chaining)이란?

A: .then()을 연속적으로 사용하여 여러 비동기 작업을 순차적으로 처리하는 방식입니다.

Q2. async/await과 Promise의 차이는?

A: async/await은 Promise를 기반으로 하며, 동기 코드처럼 비동기 로직을 작성할 수 있게 해줍니다.

Q3. Promise.all()과 Promise.race()의 차이는?

A: Promise.all(): 모든 Promise가 성공해야 결과를 반환.

    Promise.race(): 가장 먼저 완료된 Promise의 결과를 반환.