#1 var, const, let

공부의 기록·2021년 11월 3일
0

JavaScript

목록 보기
3/16
post-thumbnail

Introduce

본 문서는 2022년 1월 30일 에 작성되었습니다.
본 문서는 2022년 4월 17일 에 수정되었습니다.

Before reading...

본 시리즈를 읽기 전에 용어 정리가 필요하다고 생각합니다.

  1. identifier | 일반적으로 변수명으로 부르지만, 본문에서는 식별자 로 부르겠습니다.
  2. var, const, let | 별도의 별칭은 모르겠지만, 본문에서는 선언형 으로 부르도록 하겠습니다.
  3. primitive, reference | 본문에서는 기본형 참조형 로 부르도록 하겠습니다.

또한 이 문서는 기본적인 JavaScript 실행 원리 등을 알고 있다라고 전제하고 있습니다.
위의 내용 중에 이해가 되지 않는다면 아래를 참고해주세요.

JavaScript 는 런타임 언어 로서 필요한 시점에 필요한 친구를 준비합니다.
이러한 준비의 과정은 선언할당 의 과정으로 나뉘게 됩니다.

선언의 과정에서 우리는 식별자명 을 임의 공간에 저장하게 됩니다.
실행 컨텍스트에는 우리가 사용할 모든 식별자명이 담긴 어떤 것 을 가지고 있을 것입니다.
따라서 우리가 식별자명을 호출하면 해당 저장 공간에 접근 하게 될 것입니다.

할당의 과정에서 우리는 식별자명 옆에 있는 Value : 주소값 에 접근하게 될 것입니다.
그리고 기본형 참조형 차이에 따라서 다른 프로세스에 따라서 값을 할당하게 될 것입니다.

여기서 우리는 호이스팅 이라는 현상을 겪게 되며,
이는 실행 컨텍스트가 선언부 를 최상단으로 끌어 올리기 때문에 일어나는 현상입니다.

여기까지 이해가 되지 않는다면 Velog - unchaptered / JS Deep Theory 를 읽어주세요.


Index

  1. Varibles Process | 선언, 초기화, 할당의 구분
  2. Declare Type | 선언형의 차이
  3. Reccomend | 추천하는 방식과 그 이유

Variables Process

변수 사용까지 과정을 크게는 선언, 초기화, 할당 작게는 선언, 할당 으로 분류합니다.
여기서는 선언, 할당 으로 설명을 할 것이며 초기화 는 할당 시 동시에 진행된다고 전제하였습니다.

Declare ?

선언이란 선언형 식별자 를 필요한 시점에 메모리 상에 기록해두는 것을 의미합니다.

Allocate ?

할당이란 식별자 를 통해 접근한 주소에 별도의 주소 를 다시 연결하고 해당 주소에 값을 저장하는 것 을 의미합니다.


Declare Type

특징varconstlet
스코프 영역FunctionalBlockBlock
호이스팅OOO
재할당 여부OXO

스코프 영역

스코프 영역은 크게 Functional Block 이 존재한다.
이러한 스코프 영역은 다음에 영향을 주게 된다.

  1. 어디까지 살아남을 것인지
  2. 어디까지 호이스팅이 될 것인지
for(let idx=0; idx<10; idx++) {
  var var1 = 'test1';
  let var2 = 'test2';
  const var3 = 'test3';
}

console.log(var1); // test1
console.log(var2); // Uncaught ReferenceError: var2 is not defined
console.log(var3); // Uncaught ReferenceError: var3 is not defined
console.log(idx); // Uncaught ReferenceError: idx is not defined

JavaScript 에서 ( ) 혹은 { } 로 구분되어 있는 곳을 Block 이라고 부른다.

선언형 var 은 이러한 블록 외부에서도 호출이 가능하지만,
선언형 const, let 은 이러한 블록 외부에서는 호출이 불가능하다.

위에는 적혀있지 않지만 idx 의 선언형을 var 로 바꾸면 역시나 밖에서 호출이 가능한 상태가 된다.

호이스팅

선언형과 무관하게 모든 변수는 호이스팅이 발생한다.

재할당 여부

선언형 var, let 은 재할당이 가능하며
선언형 const 은 재할당이 불가능하다.

여기서 정확히 표현하자면 재할당은 재참조 가 정확한 표현이다.
값을 할당하는 절차는 결국 값이 저장된 공간값을 기록하는 것에 가깝다.
따라서 다음과 같은 특이한 점이 있다.

  1. const object = {} 안의 변수 추가, 수정, 삭제 가능
  2. const string = "test" 를 "test2" 로 변경 불가능

즉,
재할당이 이뤄지지 않는 다면 모든 선언형 은 const 으로 선언하며
내용의 수정이 이루어지는 경우 기본형 은 let 으로 참조형 은 const 로 선언하며
재할당이 필요한 경우에는 모든 선언형 은 let 으로 선언하는 것이 안정적일 것입니다.

profile
2022년 12월 9일 부터 노션 페이지에서 작성을 이어가고 있습니다.

0개의 댓글