
본 문서는 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 으로 선언하는 것이 안정적일 것입니다.