📂4장 변수
변수?
변수의 정의
- 하나의 값을 저장하기 위해 확보한 메모리 공간 자체
- 그 메모리 공간을 식별하기 위해 붙인 이름
🔎 용어 정리
- 할당(대입, 저장) : 변수에 값을 저장하는 것
- 참조 : 변수에 저장된 값을 읽어 들이는 것
변수의 필요성
- 기억하고 싶은 값을 메모리에 저장하고, 저장된 값을 읽어 들여 재사용하기 위해 변수 사용
식별자
- 식별자 : 메모리 상에 존재하는 어떤 값을 식별할 수 있는 이름
- 식별자는 메모리 주소를 기억 (값을 기억하는 것이 아님.)
변수 선언
var age; // 변수 선언
- 💻 var 키워드 변수 선언시 자바스크립트 엔진이 하는 일
-
- 선언 : 변수 이름 등록해서 자바스크립트 엔진에 변수의 존재를 알림.
- 초기화 : 값을 저장하기 위한 메모리 공간 확보, 암묵적으로 undefined를 할당해 초기화함.
-
- 만약 2.초기화를 거치지 않는다면?
- 확보된 메모리 공간에 이전에 사용했던 값이 있을 가능성이 있음.
- 이러한 값을 쓰레기 값(garbage value)라함.
var 키워드는 암묵적으로 초기화를 수행하므로 이러한 위험으로부터 안전.
⏳ const와 let 키워드로 선언시 자바스크립트 엔진은 어떤 일을 할까?
console.log(A) // undefined
var A;
console.log(B)
const B;
// Uncaught SyntaxError: Missing initializer in const declaration
console.log(C)
let C;
// Uncaught ReferenceError: C is not defined
변수 선언의 실행 시점과 변수 호이스팅
console.log(A) // undefined
var A; // 변수 선언
- 원칙 : 자바스크립트는 한 줄씩 순차적으로 실행 (console.log(A) 후 var A 변수 선언)
- 예외 : 모든 선언문(변수 선언문, 함수 선언문 등) 먼저 실행함. => 변수 호이스팅
🔎 용어 정리
- 런타임 : 소스코드가 한 줄씩 순차적으로 실행되는 시점
- 변수 호이스팅 : 변수 선언문이 코드의 선두로 끌어 올려진 것처럼 동작하는 것
값의 할당
👩💻 사람이 코드를 쓸 때
var age = 15; // 변수 선언과 값의 할당
💻 자바스크립트 엔진
var age; // 변수 선언
age = 15; // 값의 할당
- 자바스크립트 엔진은 변수 선언과 값의 할당을 동시에 해도 2개의 문으로 나누어 각각 실행함.
- 변수 선언은 변수 호이스팅에 의해 먼저 실행, 값의 할당은 런타임에 실행
값의 할당
- 변수 선언시 초기값인 undefined가 저장되었던 메모리 공간을 지우고 그 자리에 새롭게 값(15)을 할당 하는 것이 아님
- 새로운 메모리 공간을 확보하고 그곳에 할당 값(15)을 저장함.
📋 예제로 알아보기
👩💻 사람이 코드를 쓸 때
console.log(score); // undefined
var score = 100; // 변수 선언과 값의 할당
console.log(score) //100
💻 자바스크립트 엔진
var score; // 변수 선언
console.log(score); // undefined
score = 100; // 값의 할당
console.log(score) // 100
📋 책 예제로 풀어보기
- [예제 04-10]
console.log(score); score = 80; var score; console.log(score) // ??
- 내가 생각한 단계
var score; // 변수 호이스팅에 의해 변수 선언 먼저 실행 // 변수 선언 외의 코드들은 런타임대로 실행 console.log(score); // undefined score = 80; // 값의 할당 console.log(score) // 80
- Ask the Computer
console.log(score); // undefined score = 80; var score; console.log(score) // 80
값의 재할당
var age = 15; // 변수 선언 및 값의 할당
age = 20; // 값의 재할당
💻 자바스크립트 엔진
- 새로운 메모리 공간을 확보하고 그 공간에 재할당 값(20)을 저장
- 이전 값(15)이 저장됐던 메모리 공간을 지우고 그 공간에 재할당 값(20)을 저장하는 것이 아님.
- 이전 값(15)은 식별자와도 연결되어 있지 않으므로 가비지 콜렉터에 의해 메모리에서 자동 해제됨.
- 하지만 메모리에서 언제 해체될지는 예측할 수 없다.
🔎 용어 정리
- 가비지 콜렉터 : 할당한 메모리 공간을 주기적으로 검사하여 사용되지 않는 메로리를 해제하는 기능, 메모리 누수를 방지
상수
- 값을 재할당할 수 없는 변수
- const 키워드 사용
참고 : ⏳ 해결하지 못한 궁금점 (이후 학습에서 해결되면 업데이트할 부분)
[모던 자바스크립트 Deep Dive, ⌜이웅모 ⌟, 위키북스, 20210103]를 읽고 정리한 글입니다.
'개발언어 > [JS] deep-dive 정리' 카테고리의 다른 글
[9장] 단축 평가 - 논리 연산자를 사용한 단축 평가 (0) | 2022.12.12 |
---|---|
[9장] 타입 변환 (0) | 2022.12.12 |
8장 제어문 (2) | 2022.12.10 |
6장 데이터 타입 (0) | 2022.12.07 |
5장 표현식과 문 (0) | 2022.12.03 |
댓글