📌 변수 호이스팅(variable hoisting)에 대해서 설명해주세요
- 호이스팅(Hoisting)이란 함수 내의 변수 및 함수 선언을 각 유효 범위의 최상단으로 끌어 올려주는 JS의 독특한 특징이다.
- 선언문이 있는 코드라인을 물리적으로 최상단으로 끌어올렸기 때문이 아니라, JS 엔진이 먼저 전체 코드를 스캔하면서 변수 같은 정보를 실행 컨텍스트 어딘가에 미리 기록해놓기 때문. 이 때 기록해놓는 곳이 environment record(환경 레코드)로 식별자와 식별자에 바인딩된 값을 기록
📌 null, undefined, undeclared의 차이점은 무엇인가요? 어떻게 이 상태들에 대한 확인을 할 것인가요?
- null
- 변수가 선언되었지만 값이 없음을 나타냄
- '===' 연산자로 확인 가능
- undefined
- 변수가 선언되었지만 값이 할당되지 않았을 때 기본적으로 갖는 값
- 함수 내에서 매개변수를 정의하지 않았거나, 객체 속성에 값이 없는 경우 등에서 undefined가 발생할 수 있음
- typeof 또는 '===' 연산자로 확인 가능
- undeclared
- 변수가 아예 선언되지 않은 상태를 나타냄
- 변수를 var, let, const 키워드로 선언하지 않고 사용하려고 할 때 발생
- typeof 연산자 또는 try-catch 문으로 확인 가능
- 정리
- null은 값이 존재하지만 아무 값도 없음을 나타내고, undefined는 값이 정의되지 않았음을 나타내며, undeclared는 변수 자체가 선언되지 않았음을 나타냄
📌 변수의 선언과 할당의 차이는 무엇인가요?
- 선언 - 변수를 생성하고 메모리에 공간을 예약하는 단계
- 할당 - 선언된 변수에 값을 대입하거나 초기화하는 단계
변수는 선언 후에는 값이 정의되지 않은(undefined) 상태이며, 값을 할당하면 변수는 해당 값을 가지게 됨
📌 let, var, const를 사용하여 생성된 변수들의 차이점은 무엇인가요?
| 스코프 | 호이스팅 | 중복 선언 가능 | 재선언 가능 | 값 변경 가능 |
|---|
| var | 함수 스코프 | 발생 | 가능 | 가능 | 가능 |
| let | 블록 스코프 | 발생 | 불가능 | 오류 발생 | 가능 |
| const | 블록 스코프 | 발생 | 불가능 | 오류 발생 | 불가능 |
📌 변수의 초기화에 대해 설명해주세요.
let age1 = 56;
let age2;
위 코드의 경우 age1은 해당 메모리 주소에 56이라는 값이 저장되고 값이 없는 age2는 undefined로 메모리에 값이 저장된다.