프론트엔드 공부를 더 깊게 더 넓게 공부할 수록 자바스크립트를 확실하게 이해해야 함을 절실히 깨닫게 되었습니다. 근간이 되는 모던 자바스크립트 책을 10독을 목표로 자신만의 언어로 정리하는 시간을 가집니다.
04장 변수
변수 : 하나의 값을 저장하기 위해 확보한 메모리 공간 자체 또는 그 메모리 공간을 식별하기 위해 붙인 이름
<-> 상수 : 값을 재할당할 수 없어서 변수에 저장된 값을 변경할 수 없는 이름
- 변수는 값의 위치를 가리키는 상징적인 이름.
- 할당/대입/저장하다: 변수의 값을 저장하다.
- 참조하다: 변수에 저장된 값을 읽어 들이다.
식별자: 어떤 값을 구별해서 식별할 수 있는 고유한 이름
- 식별자는 값이 아니라 메모리 주소를 기억하고 있다.
- 메모리 상에 존재하는 어떤 값을 식별할 수 있는 이름을 모두 식별자라고 한다.
4.3 변수선언
변수 선언이란 변수를 생성하는 것을 말합니다. 값을 저장하기 위한 메모리 공간을 확보하고 변수 이름과 확보된 메모리 공간의 주소를 연결 결해서 값을 저장할 수 있게 준비하는 것을 말합니다.
- 선언 단계: 이름을 등록해서 자바스크립트 엔진에 변수의 존재를 알린다.
- 초기화 단계: 값을 저장하기 위한 메모리 공간을 확보하고 암묵적으로 undefined 라는 값을 초기화합니다.
* 자바스크립트 엔진에 의해 undefined 라는 값이 암묵적으로 할당되어 초기화되는 것을 자바스크립트의 독특한 특징입니다.
* 변수 이름을 비롯한 모든 식별자는 실행 컨텍스트에 등록됩니다. 자바스크립트 엔진은 실행컨텍스트를 통해 식별자와 스코프를 관리합니다. 실행 컨텍스트? 자바스크립트 엔진이 소스코드를 평가하고 실행하기 위해 필요한 환경을 제공하고 코드의 실행 결과를 실제로 관리하는 영역입니다.
var 키워드
var 키워드의 변수 선언은 선언 단계와 초기화 단계가 동시 진행되며, 암묵적으로 undefined를 할당합니다.
자바스크립트파일 실행과정
1. 소스코드의 평가과정 : 변수 선언을 포함한 모든 선언문(변수 선언문, 함수 선언 문 등)을 소스코드에서 찾아 먼저 실행.
2. 런타임: 모든 선언문을 제외한 소스코드를 한 줄씩 순차적으로 실행합니다.
호이스팅
: 다음과 같은 실행과정때문에 선언문이 코드의 선두로 끌어 올려진 것처럼 동작하는 자바스크립트의 고유의 특징을 말합니다.
console.log(num); // undefined 출력
const num;
4.4 값의 할당
var score = 80; // 변수 선언과 값의 할당
변수 선언과 값의 할당을 하나의 문으로 단축 표현해도 변수 선언과 값의 할당을 2개의 문으로 나누어 각각 실행합니다. 그리고 여기서 주의할 점은 변수 선언과 값의 할당의 실행 시점이 다르다는 것입니다. 변수 선언은 소스코드가 순차적으로 실행되는 시점인 런타임 이전인 소스코드의 평가단계에서 먼저 실행되지만 값의 할당은 소스코드가 순차적으로 실행되는 시점인 런타임에 실행됩니다. 따라서 변수 선언과 값의 할당을 하나의 문으로 단축해도 변수에 undefined로 초기화된 다음 값이 할당됩니다. 또한 undefined가 저장되어 있던 메모리 공간을 지우고 그 메모리 공간에 할당 값 20을 새롭게 저장하는 것이 아니라 새로운 메모리 공간을 확보하고 그곳에 할당 값 20을 저장한다는 점을 주의해야합니다.
console.log(num); //undefined
const num = 20;
console.log(num); //20
어떤 변수의 재할당으로 확보된 메모리공간이 어떤 식별자와도 연결되어 있지 않으면 아무도 사용하고 있지 않은 불필요한 값으로 간주해 가비지 콜렉터에 의해 메모리에서 자동 해제됩니다. 단 메모리에서 언제 해제될지는 예측할 수 없습니다.
*가비지 콜렉터
애플리케이션이 할당한 메모리 공간을 주기적으로 검사하여 더 이상 사용되지 않는 메모리(어떤 식별자도 참조하지 않는 메모리 공간)를 해제하는 기능을 말합니다. 자바스크립트는 가비지 콜렉터를 내장하고 있습니다.
식별자 네이밍 규칙
- 언더스코어(_), 달러 기호($),특수문자를 제외한 문자,숫자 가능
- 숫자 시작 x
- 예약어는 식별자로 사용 0 but strict mode 에서는 사용 x
- 유니코드 문자를 허용해 한글이나 일본어를 활용 가능하나 지양.
- 대소문자 구별 가능
네이밍 컨벤션 : 하나 이상의 영어 단어로 구성된 식별자를 만들 때 가독성 좋게 단어를 한눈에 구분하기 위해 규정한 명명 규칙.
- 변수나 함수 이름-> 카멜 케이스 camelCase
- 생성자 함수, 클래스 이름 -> 파스칼 케이스 PascalCase (첫 글자와 중간 글자 대문자)
'독서' 카테고리의 다른 글
[모던 자바스크립트 Deep Dive] 15장~17장 (0) | 2024.02.23 |
---|---|
[모던 자바스크립트 Deep Dive] 11장~14장 (0) | 2024.02.12 |
[모던 자바스크립트 Deep Dive] 09,10장 (1) | 2024.02.04 |
[모던 자바스크립트 Deep Dive] 07장 연산자,08장 제어문 (0) | 2024.02.02 |
[모던 자바스크립트 Deep Dive] 05장 표현식과 문, 06장 데이터 타입 (2) | 2024.02.01 |