자바 스크립트 호이 스팅 및 글로벌 범위 선언

Aug 21 2020

자바 스크립트에서 컴파일 단계는 모든 선언을 찾아 적절한 범위와 연결합니다.

사례 1

a = 2;
console.log(a);

Strict 모드에서 사용하지 않는 경우 스 니펫은 실제로 다음과 같이 처리되는 것으로 간주됩니다.

var a;
a = 2;
console.log(a);

출력 : 2

CASE2

console.log () 아래에서 선언이 발생하면

  console.log(a); 
  var a = 2;

여기 1 행에서 : 컴파일러는 해당 범위에서 a 선언이없는 경우이를 확인하고 전역 범위는 하나를 할당하고 동일한 코드가 다음과 같이 다시 가정됩니다.

   var a; 
   console.log(a);
   a = 2;

출력 : 정의되지 않음 // 인터프리터가 콘솔을 읽는 동안 값이 할당 되지 않았 으므로

CASE3

 console.log(a); 
 a = 2;

출력 : RefErr

이것이 정의되지 않은 참조 오류가 발생하는 이유는 무엇입니까?

답변

1 AbhishekJain Aug 21 2020 at 14:19

처음 두 경우를주의 깊게 살펴보면 항상 변수를 선언하고 aJavaScript에서는 선언 만 끌어 올립니다.

즉,에서 Case 3변수 a는 선언되지 않으므로 여기에서 호이 스팅이 불가능합니다. 이를 통해 a범위에 이름 에 의한 변수가 없으므로 ReferenceError.

ReferenceError 의 설명을 보면 다음과 같습니다.

ReferenceError 객체는 존재하지 않는 변수가 참조 될 때 오류를 나타냅니다.

1 Quentin Aug 21 2020 at 14:12

암시 적 전역 var 진술을 의미 하지 않습니다 . 그들을 게양하지 않습니다.