>웹 프론트엔드 >JS 튜토리얼 >JavaScript Hoisting- 움직이는 것과 무엇을 유지하는지

JavaScript Hoisting- 움직이는 것과 무엇을 유지하는지

DDD
DDD원래의
2025-01-30 08:30:10327검색

JavaScript의 개선 메커니즘은 스테이지 플레이의 설정과 같습니다. 코드가 실행되기 전에 ( "생성 단계"에서) JavaScript는 무대 직원이 커튼을 올리기 전에 소품을 지정된 위치로 이동하는 것처럼 모든 선언을 범위의 상단으로 올립니다. 유일한 차이점은 진술 만 제기되고 초기화가 개선되지 않았다는 것입니다. Javascript Hoisting - What Moves and What Stays ecmascript 사양에 따르면,이 동작은 실제로 JavaScript의 생성 단계에서 그렇게 말한 "어휘 환경"을 만드는 것의 일부입니다. 그러나 너무 기술적이지 말고 JavaScript가 코드를 실행하기 전에 "스캔"한다는 것을 기억하십시오.

개선

이 예에서 명령문은 범위의 상단으로 홍보되지만 초기화

는 개선되지 않았습니다. 그렇기 때문에 오류를 던지는 대신 첫 번째 출력

가 이유입니다. 변수 는 존재하지만 할당되지 않았습니다.

var 임시 죽은 지역 (TDZ)

이 예에서는
<code class="language-javascript">console.log(x); // 输出:undefined
var x = 5;
console.log(x); // 输出:5</code>
명령문이 개선되었지만 초기화 전에 임시 죽은 지역 (TDZ)에 위치했습니다. 초기화 전에

에 액세스하면 var x가 발생합니다. 이 동작은 , x = 5와 다릅니다. 비슷한 상황에서만 console.log(x)가 반환됩니다. undefined x 여기에는 또는

선언을 사용하는 컨텐츠도 포함되어 있습니다. 물론 함수도 포함됩니다.

let 임시 죽은 지역 (TDZ) 임시 죽은 지역에 대해 말하면, 이곳은 초기화 전에 선언하는 const

가 선언합니다. 와 다른 초기 액세스 전에
<code class="language-javascript">console.log(y); // 抛出ReferenceError: Cannot access 'y' before initialization
let y = 10;
console.log(y); // 输出:10</code>
가 반환 될 때와는 달리이 현대적인 진술은 오해 될 것입니다. ECMAScript 사양은이 행동을 "임시 죽은 지역 의미론"이라고 말하지만, 나는 그것을 "JavaScript는 우리를 정직하게 만듭니다"라고 부릅니다.

약간 어려운 예 let y 여기서 무슨 일이 있었나요? 기능 선언 가 개선되었으므로 미리 호출 할 수 있습니다. 그러나 는 어떻습니까? 그것은 여전히 ​​그 자리에 머물러 있습니다. 그렇기 때문에 방문 y가 우리에게 ReferenceError를 줄 수있는 이유이며, 스크립트가 준비되기 전에 읽으려고 노력합니다. var 클레임 선언의 함정 클래스를 개선하는 방법은 동일하지 않습니다. var undefined 클래스가 개선되었지만 정의가 평가되기 전에 여전히 "임시 데드 존"에 있습니다. 이것은 당신이 그들을 선언하기 전에 그들에게 액세스 할 수 없다는 것을 의미합니다.

명세서는 상단으로 옮겨졌지만 초기화는 변경되지 않았습니다.

위 내용은 JavaScript Hoisting- 움직이는 것과 무엇을 유지하는지의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.