일시적인 데드존이란 무엇입니까?
에 접속하는 것이let
그리고.const
초기화되기 전의 값은 다음을 야기할 수 있습니다.ReferenceError
시간적인 죽음의 영역이라고 불리는 것 때문에.
시간적 데드 존은 무엇이며, 범위 및 상승과 어떻게 관련되어 있으며, 어떤 상황에서 마주치게 됩니까?
let
그리고.const
와 크게 두 가지 차이점이 있습니다.var
:
- 블록 범위입니다.
- 액세스
var
그것이 결과가 있다고 선언되기 전에.undefined
액세스let
또는const
그것이 던지기 전에.ReferenceError
:
console.log(aVar); // undefined
console.log(aLet); // Causes ReferenceError: Cannot access 'aLet' before initialization
var aVar = 1;
let aLet = 2;
이 예들을 보면 다음과 같습니다.let
선언(및)const
동일한 방식으로 작동함)를 게양할 수 없습니다.aLet
값이 할당되기 전에는 존재하지 않는 것 같습니다.
하지만 그렇지는 않습니다.let
그리고.const
게양되어 있습니다(와 같이).var
,class
그리고.function
), 그러나 범위를 입력하고 액세스할 수 없는 곳에서 선언되는 사이에는 기간이 있습니다.이 기간은 시간적 사망 영역(TDZ)입니다.
TDZ는 다음과 같이 종료됩니다.aLet
할당되지 않고 선언됨:
// console.log(aLet) // Would throw ReferenceError
let aLet;
console.log(aLet); // undefined
aLet = 10;
console.log(aLet); // 10
이 예는 다음을 보여줍니다.let
들어 올립니다.
let x = "outer value";
(function() {
// Start TDZ for x.
console.log(x);
let x = "inner value"; // Declaration ends TDZ for x.
}());
신용: TDZ(Temporal Dead Zone)가 확인되지 않았습니다.
액세스x
내부 범위에서 여전히 발생합니다.ReferenceError
.한다면let
게양되지 않았다면, 그것은 기록될 것입니다.outer value
.
TDZ는 버그를 강조하는 데 도움이 되므로 좋은 기능입니다. 선언되기 전에 값에 액세스하는 것은 거의 의도적이지 않습니다.
TDZ는 기본 함수 인수에도 적용됩니다.인수는 왼쪽에서 오른쪽으로 평가되며 각 인수는 할당될 때까지 TDZ에 있습니다.
// b is in TDZ until its value is assigned.
function testDefaults(a = b, b) { }
testDefaults(undefined, 1); // Throws ReferenceError because the evaluation of a reads b before it has been evaluated.
TDZ는 babel.js transfiler에서 기본적으로 활성화되지 않습니다.REPL에서 사용하려면 "고준수" 모드를 설정합니다.공급:es6.spec.blockScoping
플래그를 지정하여 CLI 또는 라이브러리로 사용할 수 있습니다.
권장되는 추가 판독값: TDZ를 분해하고 ES6 Let, Const 및 "Temporal Dead Zone"(TDZ)을 깊이로 읽습니다.
호이스트:
let
,const
,var
모두 리프팅 과정을 거칩니다.
(즉, 위쪽으로 이동하여 스코프의 맨 위에 선언합니다.
초기화:
var
또한 초기 프로세스를 거치고, 초기 값을 얻습니다.undefined
.- 하는 동안에
let
,const
초기 프로세스를 던지지 않았기 때문에 이미 선언했지만 값에 액세스할 수 없습니다.무엇이 그들을 곤경에 빠뜨렸음temporal dead zone
이제 곧:
리프팅 프로세스:
var
,let
,const
초기화 프로세스:var
let 변수와 const 변수의 경우, 기본적으로 Temporal Dead Zone은 구역입니다.
"변수가 선언되기 전에",
즉, 이러한 변수의 값에 액세스할 수 없는 경우 오류가 발생합니다.
전에
let sum = a + 5; //---------
//some other code // | ------> this is TDZ for variable a
// |
console.log(sum) //---------
let a = 5;
위의 코드는 오류를 제공합니다.
변수 'a'에 var를 사용할 때 동일한 코드는 오류를 제공하지 않습니다.
전에
var sum = a;
console.log(sum) //prints undefined
var a = 5;
언급URL : https://stackoverflow.com/questions/33198849/what-is-the-temporal-dead-zone
'programing' 카테고리의 다른 글
라라벨 5의 모델에 복합 키를 넣으려면 어떻게 해야 합니까? (0) | 2023.08.13 |
---|---|
오류: 리소스 Android:attr/fontVariationSettings를 찾을 수 없습니다. (0) | 2023.08.13 |
파이썬에서 0x 없이 hex()를 사용하는 방법은 무엇입니까? (0) | 2023.08.13 |
활동과 단편 활동의 차이 (0) | 2023.08.13 |
SQL Server에서 교착 상태를 시뮬레이션하는 방법은 무엇입니까? (0) | 2023.08.13 |