>  Q&A  >  본문

javascript - 다음 코드가 "정의되지 않음"을 출력하는 이유는 무엇입니까?

코드는 다음과 같습니다.

으아악

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

으아악 으아악
迷茫迷茫2686일 전721

모든 응답(6)나는 대답할 것이다

  • 巴扎黑

    巴扎黑2017-06-12 09:32:20

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

    회신하다
    0
  • PHP中文网

    PHP中文网2017-06-12 09:32:20

    으아악

    질문 1

    실행되지 않음

    질문 2

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

    원리는 무엇인가요?

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

    으아악

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

    회신하다
    0
  • 巴扎黑

    巴扎黑2017-06-12 09:32:20

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

    회신하다
    0
  • 漂亮男人

    漂亮男人2017-06-12 09:32:20

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

    으아악

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

    회신하다
    0
  • 给我你的怀抱

    给我你的怀抱2017-06-12 09:32:20

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

    으아악

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

    회신하다
    0
  • 伊谢尔伦

    伊谢尔伦2017-06-12 09:32:20

    으아악

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

    으아악

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

    회신하다
    0
  • 취소회신하다