코드는 다음과 같습니다.
으아악 관련 설명을 봤는데 변수 선언은 승격되는데 변수 할당은 승격되지 않는데 아직도 이해가 안 되네요. if 문 블록의 코드가 실행되었습니까? 그렇지 않다면 어떤 명령문으로 인해 변수가 승격되었습니까? 실행되면 a의 값은 1이 되어야 합니다.
콘솔에 다음 코드를 입력해 보았습니다
PHP中文网2017-06-12 09:32:20
으아악
실행되지 않음
변수 승격은 명령문에 의해 발생하는 것이 아니라 실제로 js 엔진이 js 코드를 컴파일할 때 수행됩니다!
크롬을 예로 들면, 첫 번째 v8 엔진이 코드를 발견하면 다음과 같이 됩니다:
으아악그러면 a가 선언되었기 때문에 !(창의 "a")는 항상 거짓입니다! if 안의 문은 실행되지 않습니다!
Alert(a)일 때 a에는 값이 없습니다
漂亮男人2017-06-12 09:32:20
업그레이드 후 변수 선언은 다음 코드가 됩니다
으아악변수 선언이 업그레이드된 후 a가 먼저 정의되고 if 문이 입력됩니다. a는 window의 속성이므로 반전된 후에는 false가 되므로 if 문의 코드가 실행되지 않습니다. 팝업되는 것은 undefined
给我你的怀抱2017-06-12 09:32:20
var a;
if(!(창 안)){
}
alert(a);
true가 아니면 당연히 안에 있는 코드는 실행되지 않으니 정의되지 않아도 문제는 없습니다
伊谢尔伦2017-06-12 09:32:20
으아악
JavaScript 엔진이 이 코드를 구문 분석하면 다음과 같이 구문 분석됩니다.
으아악 a
이 창의 속성으로 선언되었기 때문에 if 조건은 항상 false이고 a에 값이 할당되지 않으면 정의되지 않습니다.