일시적인 데드존의 이유 :
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
과 같이 일시적인 데드 존을 유발하기도 합니다 . 그 이유는 변수 입니다. 선언 및 사용 순서import
new
class
위의 키워드 와 달리 var
, function
등 의 키워드 TDZ
는 (임시 데드존) 영향을 받지 않으며, 변수가 공통화되기 전에 접근하면 반환되는 결과는 undefined
변수 프로모션이 있기 때문 입니다.