T.D.Z는 Temporal Dead Zone의 약자로 정해진 의미를 가지고 있습니다. Temporal Dead Zone은 공상과학 용어처럼 들리지만, 우리는 우리가 매일 사용하는 용어와 개념이 무엇인지 이해하기 위해 이 세 가지 마법의 단어를 접해야 한다. 그러니 앞으로 나아가기 전에 이 세 단어, 즉 시간적, 죽음, 구역에 대해 깊게 살펴보자.
일시적인 것을 나타내는 시간적, 어떻게든 생명이 없는 상태를 의미하는 단어 dead, 구역은 메모리와 관련된 프로그래밍 세계에서 의미하거나 시간 주기 또는 위상으로 간주될 수 있는 영역을 나타낸다. 따라서 이 세 용어를 모두 조합하면 일부 실체는 일시적으로 생명이 없거나 비활성 상태여서 어떤 종류의 작업에도 사용할 수 없다는 것을 알 수 있다. 이 주제를 이해하기 위해서는 자바스크립트에서 let과 const 키워드에 대한 지식이 있어야만 현명하게 이해할 수 있습니다. 우리는 이 특정 섹션에서 임대 및 시공과 그들의 범위를 약간 검토해야 합니다!
Constust 및 let 선언 모두 블록 범위를 가지고 있으므로 { } 환경 내에서만 액세스할 수 있습니다. var는 이러한 제한이 없으므로 함수 범위에서 정의됩니다.
<스크립트>
연령을 = 5로 한다;
생일=을 진실되게 하다;
만약(경우){
연령을 = 6으로 한다.
}
console.log(age); // 5
</스크립트>
출력은 5입니다. 왜냐하면 곱슬곱슬한 교정기 안에서만 6세로 다시 지정할 수 있기 때문입니다. 따라서 "let" 키워드는 블록 스코프를 가집니다.
마찬가지로:
<스크립트>
다양한 연령 = 5;
var 생일= true;
만약(경우){
다양한 연령 = 6;
}
console.log(age); // 6
</스크립트>
이제 출력은 6입니다. 이는 "var" 키워드가 글로벌 스코프를 가지고 다른 값으로 변수의 재초기화에 액세스하기 때문입니다.
선언.
변수의 선언은 우리가 그 변수에 메모리를 할당하고 있다고 말하는 반면, 초기화는 우리가 어떤 값을 변수에 할당하고 있다고 말한다.
다시 TDZ에 대해 말씀드리면, 초기화 전에 변수에 액세스해야 하는 이유가 무엇이라고 생각하실 수 있습니다. 이것은 사실이고 잘못된 관행이지만 개발자들이 좋은 코드를 작성하고 let과 const 키워드에 대한 디버깅을 쉽게 하는 특정한 이유가 있다.
TDZ에 대해 자세히 알아봅시다.
<스크립트>
console.log(x);/ 정의되지 않았습니다.
var x= 6;
console.log(x); //6
</스크립트>
여기서 전역 실행 컨텍스트가 생성되고 메모리가 x에 할당된다; 즉, x는 메모리에 자리를 잡았고 JS 엔진은 정의되지 않은 상태를 두며, 이제 스레드 실행 단계가 이 콘솔 동안 시작된다.log 문은 정의되지 않은 x의 값 저장소를 출력한다.
다음 줄에는 x가 6에 할당되고 x의 정의되지 않은 값이 6으로 대체됩니다.
이제 let와 const에 관한 몇 가지 코드를 사용합니다.
<스크립트>
console.log(x);
console.log(z);
var x=6;
z = 4로 한다;
console.log(x);
console.log(z);
</스크립트>
// 정의되지 않은
// referenceError : 초기화 전에 z에 액세스할 수 없습니다.
먼저 모든 전역 실행 컨텍스트가 생성되고 메모리 할당 단계가 시작되며, 이 동안 변수 x는 정의되지 않은 상태로 둔다. z가 다른 메모리 위치에 공간을 가져오면 x가 정의되지 않은 것과 같은 값이 할당된다. 이제 이 console.log(x) 문이 실행되는 동안 스레드 실행 단계가 시작되고 정의되지 않은 x의 값을 인쇄합니다.
다음 줄에 console.log(z) 자바스크립트가 이 경우 참조 오류를 발생시키고 프로그램이 중지됩니다(TDZ 발생).
"따라서 TDz는 변수를 올린 이후 어떤 값이 초기화될 때까지의 시간이며, 그 사이의 시간은 시간 데드 존으로 알려져 있다."
감사해요!
'프로그래밍' 카테고리의 다른 글
Python을 사용하여 설명하는 정렬 알고리즘: 선택 정렬 (0) | 2022.01.12 |
---|---|
추적 UI: tyny.dev가 시장에서 가장 뛰어난 UI 명령을 갖는 이유 (0) | 2022.01.12 |
기능적 프로그래밍 (Part 0) : 프로그래밍 패러다임 간 간략한 비교 (0) | 2022.01.12 |
배포 가능한 응용 프로그램 작성 - 데이터베이스 버전 (1) | 2022.01.12 |
C++를 사용하여 나만의 메타버스를 만드는 방법 (0) | 2022.01.12 |
댓글