programing tip

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

itbloger 2020. 7. 5. 08:09
반응형

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


액세스 하기 전에 값 letconst값이 초기화되기 전에 일시적인 데드 존ReferenceError 이라고 불리는 것이 발생할 수 있다고 들었습니다 .

일시적 데드 존이란 무엇이며, 범위 및 게양과 어떤 관계가 있으며, 어떤 상황에서 발생합니까?


let다음과 const크게 다른 두 가지가 있습니다 var.

  1. 그것들은 블록 범위 입니다.
  2. var선언되기 전에 a에 액세스 하면 결과가 나타납니다 undefined. 접근 let이나 const가 선언되기 전에하면 발생합니다 ReferenceError:

console.log(aVar); // undefined
console.log(aLet); // causes ReferenceError: aLet is not defined
var aVar = 1;
let aLet = 2;

이러한 예에서 let선언 (및 const동일한 방식으로 작동)은 값이 할당되기 전에 존재하지 않는 것으로 보이기 때문에 호이스트 되지 않을 수 있습니다 aLet.

즉, however- 그렇지 않은 let하고 const 있다 게양 (같은 var, classfunction), 그러나 범위를 입력하고 액세스 할 수없는 경우 선언되는 기간 사이에있다. 이 기간은 TDZ (Temporal Dead Zone) 입니다.

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
}());

크레딧 : Temporal Dead Zone (TDZ) demystified

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.

babel.js 트랜스 필러 에서는 기본적으로 TDZ가 활성화되어 있지 않습니다 . REPL 에서 사용하려면 "고 규격 준수"모드를 켜십시오 . 공급 es6.spec.blockScopingCLI를 또는 라이브러리로 사용하는 플래그.

추가 권장 사항 : TDZ 미신ES6 Let, Const 및 "TDZ (Temporal Dead Zone)"깊이 .


ㅏ :
let , const, var모든 GET 게양 과정이다.
(무엇보다 상위에 올라서 범위의 상단에 선언한다는 의미입니다.)

초기화 :

  • 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

반응형