찾다

 >  Q&A  >  본문

자바스크립트 함수 선언을 승격시키면 함수 본문도 함께 승격되나요?

자바스크립트 함수선언 승격, 함수본체도 같이 승격되나요?

가 아닌 경우 다음과 같은 반례가 있습니다.

으아아아

인 경우 다음과 같은 반례가 있습니다.

으아아아

첫 번째 예는 함수 본문도 승격된다는 것을 보여줍니다. 이 아이디어를 따라 코드의 두 번째 부분을 이해하면 "이름 바꾸기" 함수가 서로를 다루고 이후의 함수가 이전 함수를 다루므로 콘솔입니다. log(func) 'function func() {console.log('22');};' 문자열이 출력되지만 실제로는 그렇지 않습니다.

세 가지 질문이 발생합니다:

  1. "변수 프로모션, 기능 우선순위"를 어떻게 이해하나요?

  2. 기능 본체도 개선됐나요?

  3. 두 번째 코드의 결과를 어떻게 해석하나요?

PHP中文网PHP中文网2835일 전760

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

  • PHPz

    PHPz2017-05-19 10:45:15

    제가 쓴 글을 읽으시면 모든 내용을 이해하실 것이라 믿습니다. JavaScript 실행 컨텍스트, 함수 스택 및 프로모션의 개념을 깊이 이해하세요

    회신하다
    0
  • 習慣沉默

    習慣沉默2017-05-19 10:45:15

    if는 조건부 판단을 나타냅니다. 컴파일 중에는 코드를 실행해서는 안 되며 구문 및 어휘 분석만 확인합니다. 브라우저를 변경해 보거나, 테스트를 위해 엄격 모드를 활성화해 보세요~

    1. 변수 승격, 함수 우선순위, 즉 var a = 1; function fun(){}; 및 function fun(){}이 범위의 최상위 수준으로 승격됩니다.
    2. 또한 개선되었습니다. 함수 표현식은 그렇지 않습니다. var fun = function(){}; 이 유형은 var fun을 향상시킬 뿐입니다.
    3 두 번째 단락은 실제로 다음과 같이 설명할 수 있습니다

    으아악

    회신하다
    0
  • 天蓬老师

    天蓬老师2017-05-19 10:45:15

    자세한 소개는 MDN http://kangax.github.io/nfe/#...

    을 참조하세요.

    회신하다
    0
  • 某草草

    某草草2017-05-19 10:45:15

    비엄격 모드에서는 if 문 내부에 있는 함수 선언의 승격 여부가 각 커널의 구현에 따라 다릅니다.

    결론은 기능이 개선되겠지만 if 문 내부에서 각 코어의 구현 여부에 따라 다릅니다.

    엄격 모드는 스크립트나 함수 수준이 아닌 함수 선언을 금지합니다

    회신하다
    0
  • ringa_lee

    ringa_lee2017-05-19 10:45:15

    참조할 수 있는 곳: /q/10...

    회신하다
    0
  • PHP中文网

    PHP中文网2017-05-19 10:45:15

    함수 및 변수 선언이 승격됩니다. 함수 승격이 변수 승격보다 우선합니다. 직접 실행되는 코드는 승격될 수 없습니다. 첫 번째 코드는 직접적으로 개선되었습니다. 두 번째 코드에서 정의한 함수는 if 문 구조에 있습니다. 두 개의 로그와 if는 실행 중인 스택에서 순서대로 실행되어야 합니다. 분명히 if 문이 실행되기 전에 func가 선언되지 않았습니다.

    회신하다
    0
  • 怪我咯

    怪我咯2017-05-19 10:45:15

    es6에는 몇 가지 블록 수준 범위 규칙이 있습니다. 이전 버전의 노드 또는 낮은 버전의 Chrome에서 실행하면 다음 코드와 동일합니다
    으아악

    그러나 상위 버전의 노드 및 크롬에서는 이러한 변수의 개선이 제한되어 코드 상황이 발생하게 됩니다! ~! ~

    회신하다
    0
  • 仅有的幸福

    仅有的幸福2017-05-19 10:45:15

    JavaScript는 함수 수준 범위이기 때문입니다(function-level scope
    所以if中并没有独立维护一个scope

    영어 설명:
    javascript-variable-scope-and-hoisting-explained
    중국어 설명: Javascript 범위 및 변수 호이스팅

    회신하다
    0
  • PHP中文网

    PHP中文网2017-05-19 10:45:15

    일반적으로 조건문에 함수 선언을 작성하는 것은 권장되지 않습니다.
    이것은 ECMAScript의 잘못된 구문이며 JavaScript 엔진은 오류를 수정하고 정상적이고 합리적인 상태로 변환하려고 시도합니다. 하지만 이 수정 방법은 브라우저마다 다릅니다. 함수 표현식을 사용하는 것이 좋습니다:
    var func;
    if(true){

    으아악

    }그밖에{

    으아악

    }

    회신하다
    0
  • phpcn_u1582

    phpcn_u15822017-05-19 10:45:15

    http://blog.csdn.net/qq673318...
    링크에 설명 있음
    ————포터

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