js 상세 es6 let TDZ(임시 데드존)

일시적인 데드존의 이유 :

ES6블록에 ( ) let및 문이 있으면 이 명령에 대해 이 블록에서 선언한 변수는 처음부터 닫힌 범위를 형성한다고 명시되어 있습니다 . 선언 전에 이러한 변수를 사용 하면 오류가 발생합니다 .const注意:let、const语句不存在变量提升

예를 들어:

//场景一:
var a = 10;
function b() {
    
    
    console.log(a);
    let a = 20;
}
b();  // Uncaught ReferenceError: Cannot access 'a' before initialization 初始化前无法访问“a”
console.log(a);

a를 정의하는 함수 b에 let이 있고 이전 console.log(a);는 변수 a가 선언되기 전에 사용될 때 일시적인 데드 존을 발생시키므로 오류가 보고되므로 여기에서 오류가 보고됩니다.

//场景二:
  // TDZ开始
  a = 'abc'; // ReferenceError
  console.log(a); // ReferenceError

  let a; // TDZ结束
  console.log(a); // undefined

  a = 123;
  console.log(a); // 123

여기에 오류가 보고됩니다. let명령이 변수를 선언 하기 전에 변수의 "임시 데드 존" a에 속합니다 .a

//场景三:
  let a = a  // ReferenceError

위의 코드에서 보고된 오류도 일시적인 데드존 때문입니다. 선언된 변수를 사용할 때 let선언이 완료되기 전에 변수를 사용하는 한 오류가 보고됩니다. 위 줄이 이런 상황에 속합니다. a변수의 선언문이 실행되기 전에 a값을 가져오므로 오류가 발생합니다." Cannot access 'a' before initialization"

확장: 일시적인 데드 존을 유발하는 기타 현상:

let/const키워드가 나타나기 전에 연산자는 100% 안전했으며 이제는 키워드가 공용 모듈을 소개하고 클래스 를 생성하는 방식 typeof과 같이 일시적인 데드 존을 유발하기도 합니다 . 그 이유는 변수 입니다. 선언 및 사용 순서importnewclass

위의 키워드 와 달리 var, function등 의 키워드 TDZ는 (임시 데드존) 영향을 받지 않으며, 변수가 공통화되기 전에 접근하면 반환되는 결과는 undefined변수 프로모션이 있기 때문 입니다.

Supongo que te gusta

Origin blog.csdn.net/qq_44094296/article/details/125390773
Recomendado
Clasificación