javascript - 다음 코드가 "정의되지 않음"을 출력하는 이유는 무엇입니까?
迷茫
迷茫 2017-06-12 09:30:20
0
6
807

코드는 다음과 같습니다.

으아악

관련 설명을 봤는데 변수 선언은 승격되는데 변수 할당은 승격되지 않는데 아직도 이해가 안 되네요. if 문 블록의 코드가 실행되었습니까? 그렇지 않다면 어떤 명령문으로 인해 변수가 승격되었습니까? 실행되면 a의 값은 1이 되어야 합니다.
콘솔에 다음 코드를 입력해 보았습니다

으아악 으아악
迷茫
迷茫

业精于勤,荒于嬉;行成于思,毁于随。

모든 응답(6)
巴扎黑

if(창의 "a")
var a = 1;
alert(a);

Ty80

으아악

질문 1

실행되지 않음

질문 2

변수 승격은 명령문에 의해 발생하는 것이 아니라 실제로 js 엔진이 js 코드를 컴파일할 때 수행됩니다!

원리는 무엇인가요?

크롬을 예로 들면, 첫 번째 v8 엔진이 코드를 발견하면 다음과 같이 됩니다:

으아악

그러면 a가 선언되었기 때문에 !(창의 "a")는 항상 거짓입니다! if 안의 문은 실행되지 않습니다!
Alert(a)일 때 a에는 값이 없습니다

巴扎黑

귀하의 코드를 사용했는데 결과는 팝업 1이었습니다

漂亮男人

업그레이드 후 변수 선언은 다음 코드가 됩니다

으아악

변수 선언이 업그레이드된 후 a가 먼저 정의되고 if 문이 입력됩니다. a는 window의 속성이므로 반전된 후에는 false가 되므로 if 문의 코드가 실행되지 않습니다. 팝업되는 것은 undefined

给我你的怀抱

var a;
if(!(창 안)){

으아악

}
alert(a);
true가 아니면 당연히 안에 있는 코드는 실행되지 않으니 정의되지 않아도 문제는 없습니다

伊谢尔伦

으아악

JavaScript 엔진이 이 코드를 구문 분석하면 다음과 같이 구문 분석됩니다.

으아악

a이 창의 속성으로 선언되었기 때문에 if 조건은 항상 false이고 a에 값이 할당되지 않으면 정의되지 않습니다.

최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿