JavaScript : 함수 실행 순서

user7259306

자바 스크립트를 배우고 있는데 이해할 수없는 것이 많습니다. 한 온라인 JavaScript 퀴즈에서 다음과 같은 질문이 나타났습니다.
다음 JavaScript 코드가 콘솔에 기록되는 것은 무엇입니까?

const a = {};
const b = () => a.a = () => {};
const c = c => '' + c + a.a(b());
const d = console.log.bind(console);
const e = (e => () => d(c(e++)))(0);

try{
  e();
}catch(a){
  e();
}

각 변수 (여기서는 상수)가 무엇을 의미하는지 이해하는 데 시간이 걸렸습니다. e()내부 try블록 에서 코드를 분석하기 시작했습니다 . 그래서, e그 기능은 의미 폐쇄 나타내는 d인수로 호출됩니다 c(0)e이 될 것이다 1. 내가 이해했듯이, 여기 d기본적으로 console.log함수를 나타냅니다 (그러나 왜 그들이 bind? 를 사용했는지 알 수 없습니다 ).

지금은 먼저 실행 c(0)되고 결과가 콘솔에 기록 된다는 것을 알고 있습니다 . function을 살펴 보겠습니다 c. 문자열로 변환 된 첫 번째 인수와의 연결된 결과를 반환합니다 a.a(b()). 그럼 a.a(b())먼저 실행하겠습니다. 맞나요? 그러나 문제는 a.a함수가 아니고 정의되지 않았기 때문에 오류가 발생하고 catch.

이제 catch블록에서 모든 것이 동일해야하므로 a.a여전히 함수가 아니며 참조 오류가 발생해야합니다. 그러나 오류가 발생하지 않는 것을 보았을 때 놀랐지 만 콘솔은 실제로 1undefined. 왜? 어떻게?

좋아, 약간의 생각 끝에 나는 아마도 호출 할 때 a.a(b())아마도 b()먼저 실행 된다는 것을 깨달았다 . 내 가정에 따라 함수 는 object의 b속성 a아무것도하지 않는 함수에 대한 참조를 지정합니다 a. 그러나 a.aIS는 함수이고 try블록 에서 실행되고 0undefined기록됩니다.

그러나이 두 가지 가정 중 어느 것도 옳지 않습니다. 여기서 주요 질문은 무엇을 먼저 실행합니까? 전화 someObject.propertyWhichIsNotAFunction(somethingWhichMakesItAFunction)하면 어떻게 되나요? 무엇을 먼저 실행합니까? try블록에서 하나는 먼저 실행되고 catch다른 것은 실행되는 것 같습니다 . 정말 말이 안 돼요. 설명이 있습니까?

이것은 foo.x = foo = {n : 2}에서 foo.x의 값이 정의되지 않은 이유 와 매우 유사합니다 . , 실행시 TypeError가 발생할 때 의존하기 때문에 약간 까다 롭습니다.

기본적으로 일어나는 일은 다음과 같습니다.

  1. a.a나중에 3 단계에서 어떤 함수가 호출 될지 알아보기 위해 평가됩니다 .
  2. b()함수 인수이고 반환 값이 a.a평가 대상에 대한 실제 인수가되므로 평가됩니다.
  3. 어쨌든 a.a단계 1의 리턴 값으로 실행에 따라 평가 b()인수로서.

사양의 관련 부분은 다음과 같습니다. https://www.ecma-international.org/ecma-262/7.0/index.html#sec-function-calls

함수가 호출 될 때 발생하는 첫 번째 일은 다음과 같습니다.

  1. 하자 심판 MemberExpression 평가의 결과.
  2. func되자 ? GetValue (ref).

즉, a.a평가되고 참조하는 함수가 호출 func됩니다. 주위에 처음 a.a으로 평가가 undefined너무 func이다 undefined및 형식 오류는 2 단계에서 발생한다 https://www.ecma-international.org/ecma-262/7.0/index.html#sec-evaluatedirectcall 이다 후의 ArgumentListEvaluation(arguments) 어느 를 호출 b()하고에 새 값을 할당 a.a하지만 값 뒤에는 없습니다 func.

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

Javascript 함수 실행 순서 작성

분류에서Dev

에서 Javascript 함수 실행

분류에서Dev

함수 실행 순서-cpp

분류에서Dev

JavaScript : 함수가 다른 순서로 실행 됨

분류에서Dev

JavaScript : 함수가 다른 순서로 실행 됨

분류에서Dev

javascript / jquery에서 함수 실행

분류에서Dev

$ q-함수 실행 제어 순서

분류에서Dev

(JavaScript) 다른 함수의 콜백에서 함수 실행

분류에서Dev

Perl 변수 실행 순서

분류에서Dev

절전 모드에서 올바른 순서로 실행되지 않는 JavaScript 함수

분류에서Dev

jQuery JavaScript 함수 순서

분류에서Dev

Javascript에서 i ++ 실행 순서 정보

분류에서Dev

비동기 JavaScript 실행 순서?

분류에서Dev

C # 함수 ASP.Net에서 Javascript 함수가 실행되지 않음

분류에서Dev

Javascript 함수 내에서 Promises가 어떻게 실행됩니까?

분류에서Dev

Array Javascript의 각 객체에서 함수 실행

분류에서Dev

javascript에서 then / catch 전에 함수 (예 : finally)를 실행합니다.

분류에서Dev

onclick JavaScript에서 실행되는 루프 함수

분류에서Dev

새 창 개체에서 실행할 JavaScript 함수 전달

분류에서Dev

Ajax () 응답에서 JavaScript 함수를 실행하는 방법

분류에서Dev

PHP 및 Javascript로 기본 HTML 선택에서 함수 실행

분류에서Dev

함수 인수를 전달할 때 C ++ 실행 순서

분류에서Dev

mxunit 테스트 케이스에서 함수 실행 순서

분류에서Dev

자바 스크립트에서 함수 실행 순서

분류에서Dev

gnu makefile : 레시피의 쉘 함수 실행 순서

분류에서Dev

Ajax의 루프, 함수 실행 순서 지정

분류에서Dev

Node.js : 미들웨어 및 콜백 함수 실행 순서?

분류에서Dev

Angular Directive-올바른 함수 실행 순서

분류에서Dev

두 함수를 병합하고 순서대로 실행

Related 관련 기사

  1. 1

    Javascript 함수 실행 순서 작성

  2. 2

    에서 Javascript 함수 실행

  3. 3

    함수 실행 순서-cpp

  4. 4

    JavaScript : 함수가 다른 순서로 실행 됨

  5. 5

    JavaScript : 함수가 다른 순서로 실행 됨

  6. 6

    javascript / jquery에서 함수 실행

  7. 7

    $ q-함수 실행 제어 순서

  8. 8

    (JavaScript) 다른 함수의 콜백에서 함수 실행

  9. 9

    Perl 변수 실행 순서

  10. 10

    절전 모드에서 올바른 순서로 실행되지 않는 JavaScript 함수

  11. 11

    jQuery JavaScript 함수 순서

  12. 12

    Javascript에서 i ++ 실행 순서 정보

  13. 13

    비동기 JavaScript 실행 순서?

  14. 14

    C # 함수 ASP.Net에서 Javascript 함수가 실행되지 않음

  15. 15

    Javascript 함수 내에서 Promises가 어떻게 실행됩니까?

  16. 16

    Array Javascript의 각 객체에서 함수 실행

  17. 17

    javascript에서 then / catch 전에 함수 (예 : finally)를 실행합니다.

  18. 18

    onclick JavaScript에서 실행되는 루프 함수

  19. 19

    새 창 개체에서 실행할 JavaScript 함수 전달

  20. 20

    Ajax () 응답에서 JavaScript 함수를 실행하는 방법

  21. 21

    PHP 및 Javascript로 기본 HTML 선택에서 함수 실행

  22. 22

    함수 인수를 전달할 때 C ++ 실행 순서

  23. 23

    mxunit 테스트 케이스에서 함수 실행 순서

  24. 24

    자바 스크립트에서 함수 실행 순서

  25. 25

    gnu makefile : 레시피의 쉘 함수 실행 순서

  26. 26

    Ajax의 루프, 함수 실행 순서 지정

  27. 27

    Node.js : 미들웨어 및 콜백 함수 실행 순서?

  28. 28

    Angular Directive-올바른 함수 실행 순서

  29. 29

    두 함수를 병합하고 순서대로 실행

뜨겁다태그

보관