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 중국어 웹사이트의 기타 관련 기사를 참조하세요!