본 문서는 2022년 1월 30일 에 작성되었습니다.
본 문서는 2022년 4월 17일 에 수정되었습니다.
본 시리즈를 읽기 전에 용어 정리가 필요하다고 생각합니다.
identifier
| 일반적으로 변수명으로 부르지만, 본문에서는 식별자
로 부르겠습니다.var, const, let
| 별도의 별칭은 모르겠지만, 본문에서는 선언형
으로 부르도록 하겠습니다.primitive, reference
| 본문에서는 기본형
참조형
로 부르도록 하겠습니다.또한 이 문서는 기본적인 JavaScript 실행 원리 등을 알고 있다라고 전제하고 있습니다.
위의 내용 중에 이해가 되지 않는다면 아래를 참고해주세요.
JavaScript 는
런타임 언어
로서 필요한 시점에 필요한 친구를 준비합니다.
이러한 준비의 과정은선언
과할당
의 과정으로 나뉘게 됩니다.선언의 과정에서 우리는
식별자명
을 임의 공간에 저장하게 됩니다.
실행 컨텍스트에는 우리가 사용할모든 식별자명이 담긴 어떤 것
을 가지고 있을 것입니다.
따라서 우리가 식별자명을 호출하면해당 저장 공간에 접근
하게 될 것입니다.할당의 과정에서 우리는
식별자명 옆에 있는 Value : 주소값
에 접근하게 될 것입니다.
그리고기본형
참조형
차이에 따라서 다른 프로세스에 따라서 값을 할당하게 될 것입니다.여기서 우리는
호이스팅
이라는 현상을 겪게 되며,
이는 실행 컨텍스트가선언부
를 최상단으로 끌어 올리기 때문에 일어나는 현상입니다.여기까지 이해가 되지 않는다면 Velog - unchaptered / JS Deep Theory 를 읽어주세요.
Varibles Process
| 선언, 초기화, 할당의 구분Declare Type
| 선언형의 차이Reccomend
| 추천하는 방식과 그 이유변수 사용까지 과정을 크게는 선언, 초기화, 할당 작게는 선언, 할당 으로 분류합니다.
여기서는 선언, 할당
으로 설명을 할 것이며 초기화
는 할당 시 동시에 진행된다고 전제하였습니다.
선언이란 선언형
식별자
를 필요한 시점에 메모리 상에 기록해두는 것을 의미합니다.
할당이란 식별자
를 통해 접근한 주소에 별도의 주소
를 다시 연결하고 해당 주소에 값을 저장하는 것
을 의미합니다.
특징 | var | const | let |
---|---|---|---|
스코프 영역 | Functional | Block | Block |
호이스팅 | O | O | O |
재할당 여부 | O | X | O |
스코프 영역은 크게 Functional
Block
이 존재한다.
이러한 스코프 영역은 다음에 영향을 주게 된다.
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
은 재할당이 불가능하다.
여기서 정확히 표현하자면 재할당은 재참조
가 정확한 표현이다.
값을 할당하는 절차는 결국 값이 저장된 공간값을 기록하는 것에 가깝다.
따라서 다음과 같은 특이한 점이 있다.
즉,
재할당이 이뤄지지 않는 다면 모든 선언형
은 const 으로 선언하며
내용의 수정이 이루어지는 경우 기본형
은 let 으로 참조형
은 const 로 선언하며
재할당이 필요한 경우에는 모든 선언형
은 let 으로 선언하는 것이 안정적일 것입니다.