programing

일시적인 데드존이란 무엇입니까?

yellowcard 2023. 8. 13. 09:37
반응형

일시적인 데드존이란 무엇입니까?

에 접속하는 것이let그리고.const초기화되기 전의 값은 다음을 야기할 수 있습니다.ReferenceError시간적인 죽음의 영역이라고 불리는 것 때문에.

시간적 데드 존은 무엇이며, 범위 및 상승과 어떻게 관련되어 있으며, 어떤 상황에서 마주치게 됩니까?

let그리고.const와 크게 두 가지 차이점이 있습니다.var:

  1. 블록 범위입니다.
  2. 액세스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

반응형