해당 면접 답변용 정리 카테고리의 글들은 내용 전체적인 포스팅이 아니라 면접에서 질문을 받았을 때 대답해야할 것들만 정리해둔 것으로 해당 내용을 공부하고 이해한 것들을 바탕으로 답변용으로 정리해둔 것이다. 내용을 자세히 알고 싶다면 다른 정리해둔 글을 보는게 더 효과적일 것이다.
변수와 식별자란 각각 무엇인가요?
- 변수(variable)란 데이터를 할당하고 참조하기 위해 사용되는 이름이 붙은 메모리 공간
- 식별자(identifier)란 변수, 함수, 객체 등을 식별하기 위한 이름으로 사용되는 단어
⭐️ 식별자는 값이 아니라 메모리 주소를 기억하고 있다.
변수 선언이란 무엇을 의미하나요?
주로 3가지 키워드(var, let, const)를 사용하여 변수의 유효 범위(scope)와 생존 기간(lifetime)을 결정하며, 해당 변수가 저장하는 데이터 타입과 값을 설정하는 것
변수 선언, 초기화, 할당의 차이점을 설명할 수 있나요?
선언 단계 - const, let, var 중 필요한 선언 키워드를 통해 이루어진다. 실행 컨텍스트를 생성하고, 변수나 함수를 등록하는 단계
초기화 단계 - 선언 단계에서 이름이 정해진 변수에 값을 저장하기 위한 메모리 공간을 확보하고, 암묵적으로 undefined를 할당하는 단계
할당 단계 - undefined로 초기화된 메모리의 주소값을 할당값이 저장된 주소값으로 교체하여 저장하는 단계
var키워드는 무엇이고, 어떤 문제점이 있나요?
var는 ES6의 등장전에 변수를 선언하는 키워드
var는 중복 선언이 가능하다는 문제, 함수 레벨 스코프이기 때문에 블럭 외부에서도 참조할 수 있다는 문제, 호이스팅이 되어 선언되기 전에 참조가 되어도 에러를 발생시키지 않는 문제
호이스팅은 무엇인가요?
자바스크립트 엔진은 코드를 실행하기 전에 실행 가능한 코드를 형상화하고 구분하는 과정에서 코드 실행을 위한 모든 선언들을 미리 메모리에 저장한다. 이 때문에 변수 및 함수 선언들이 해당 스코프의 최상단으로 끌어올려진 것 같은 현상
⭐️ 주의할 점 : 함수 선언식은 호이스팅이 되지만, 함수 표현식은 선언 키워드를 사용하기 때문에 선언 키워드에 따라 달라진다.
var, let, const 키워드의 차이는 무엇인가요?
1. 변수의 생성과정
var - 선언 및 초기화 단계 -> 할당 단계 (코드 실행 전에 자바스크립트 엔진이 미리 선언, undefined 초기화를 해놨기 때문에 호이스팅 에러가 발생하지않음)
let - 선언 단계 -> 초기화 단계 -> 할당 단계
const - 선언 + 초기화 + 할당 단계
2. 중복 선언
var - 가능
let, const - 불가능
3. 재할당 여부
var, let - 가능
const - 불가능
4. 변수 스코프 유효범위
var - 함수 레벨 스코프
let, const - 블록 레벨 스코프
TDZ는 무엇인가요?
스코프 혹은 라이프 사이클의 시작지점부터 초기화 단계 직전까지의 구간
즉, 변수가 선언은 되었지만 초기화가 되기 전에 사용하게 되면 TDZ상태에서 사용하는 것이기 때문에 에러가 발생하는 것
TDZ에 영향을 받는 것
- let
- const
- class
- 함수 매개변수
TDZ에 영향을 받지 않는 것
- var
- function (함수 선언식)
- import
참고