일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- 타입스크립트
- 이진탐색
- APOLLO
- alexnet
- 포인터
- C
- vue3
- 자바스크립트
- GraphQL
- 자료구조
- 컨테이너
- 연결리스트
- 알고리즘
- Machine Learning
- 코딩테스트
- 연결 리스트
- 배열
- 큐
- cors
- RxJS
- 웹팩
- 프로그래머스
- 브라우저
- 해시테이블
- 프로세스
- 스택
- 프론트엔드
- 릿코드
- RT scheduling
- pytorch
- Today
- Total
프린세스 다이어리
자바스크립트 변수를 선언하고 값을 할당하는 일련의 과정 설명하기 본문
Q. 자바스크립트에서 변수를 선언하고 값을 할당하는 일련의 과정을 설명해보세요.
(1) 변수 선언 키워드 (var, let, const)로 변수 이름을 선언하면, 메모리 공간을 확보하여 값을 저장하기 위한 준비를 한다.
- 메모리 공간을 확보하고
- 변수 이름과 확보된 메모리 공간의 주소를 연결한다.
-> 즉 값을 저장할 수 있게 준비하는 것이다.
-> 이 메모리 공간은 해제되기 전까지는 보호된다.
(2) 자바스크립트 엔진은 변수 선언을 2단계에 걸쳐 수행한다.
- 선언 단계: 변수 이름을 실행 컨텍스트에 등록해서 자바스크립트 엔진에 변수의 존재를 알린다.
- 초기화 단계: 값을 저장하기 위한 메모리 공간을 확보하고, 암묵적으로 undefined를 할당해 초기화한다.
(초기화 단계를 거치지 않으면, 확보된 메모리 공간에는 이전에 사용했던 쓰레기 값이 남아있을 수 있다. 자바스크립트 엔진은 암묵적으로 초기화를 수행하기 때문에 상관 없다.)
(3) 변수 선언은 코드가 한 줄씩 순차적으로 실행되기 이전에, 소스코드의 평가 과정에서 완료된다.
console.log(score); // undefined. ReferenceError(참조 에러)가 아닌 undefined 출력
var score; // 변수 선언문
- 소스코드의 평가 과정에서 자바스크립트 엔진은 변수 선언을 포함해 모든 선언문을 찾아내 먼저 실행한다.
- 소스코드의 평가 과정이 끝나면, 비로소 모든 선언문을 제외하고 소스코드를 한 줄씩 순차적으로 실행한다.
- 이렇게 변수 선언문이 코드의 선두로 마치 끌어올려진 것처럼 동작하는 것을 변수 호이스팅이라고 한다.
(4) 변수에 값을 할당할 때는 소스코드의 평가 과정 이후, 소스코드가 순차적으로 실행되는 시점인 런타임에 실행된다.
var score = 100; // 변수 선언과 값의 할당
- 변수 선언+값의 할당을 하나의 문으로 단축해도, 소스코드 평가 과정에서 변수 선언이, 런타임 시점에 값의 할당이 이루어진다.
- 변수에 값을 할당할 때는, 기존에 undefined가 할당된 공간을 비우고 그 공간에 100을 저장하는 게 아니라, 새로운 메모리 공간을 확보하고 그곳에 할당 값 100을 저장한다.
- 더 이상 메모리를 사용할 필요가 없으면 변수에 null을 할당해주면 된다.
출처: <모던 자바스크립트 Deep Dive> 4장
'FE' 카테고리의 다른 글
자바스크립트 숫자 타입 정리 (0) | 2021.12.04 |
---|---|
값, 리터럴, 표현식, 문 용어 제대로 알기 (0) | 2021.12.02 |
CSR(클라이언트 사이드 렌더링) vs SSR(서버 사이드 렌더링) 단골질문 뽀개기 (1) | 2021.11.29 |
자바스크립트 this란 무엇인가 (0) | 2021.11.28 |
이벤트 캡쳐링, 이벤트 버블링 개념, 방지하는 방법 (0) | 2021.11.25 |