찾다

 >  Q&A  >  본문

ES 2017: 비동기 함수 vs AsyncFunction 객체 vs 비동기 함수 표현

방금 async 函数 에 대해 읽고 ES2017의 몇 가지 유사한 기능을 발견했습니다. 많은 혼란을 야기하고 있어 묻고 싶습니다.

  1. async functionAsyncFunction(비동기 함수를 만드는 데 사용됨)과 비동기 함수 표현식(다른 비동기 함수일 뿐이라고 생각함)의 차이점은 무엇인가요?
  2. 언제 한 형식을 다른 형식보다 사용해야 합니까?

모두의 개성과 퍼포먼스를 하이라이트로 올려주시면 감사하겠습니다!

P粉459440991P粉459440991276일 전428

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

  • P粉287726308

    P粉2877263082024-03-26 00:44:29

    Javascript에서 함수를 만드는 방법에는 네 가지가 있습니다. Javascript에는 서로 정확히 동일한 비동기 함수를 생성하는 네 가지 방법이 있습니다.

    이것이 어떻게 작동하는지 보여주기 위해 전역적으로 선언된 간단한 sleep 함수를 사용했습니다.

    으아아아

    함수 선언

    으아아아

    이것은 함수를 선언하는 가장 간단한 방법입니다. 한 번 선언하면 현재 함수 범위의 맨 위로 끌어올려질 수 있습니다.

    함수 선언은 async 函数始终返回一个 Promise 并允许您使用 await를 제외하고 비동기 함수 선언과 정확히 동일합니다.

    함수 표현

    으아아아

    함수 표현식은 함수 선언과 매우 유사합니다. 그러나 함수 범위의 맨 위로 승격되지는 않습니다. 필요한 만큼 여러 번 재정의할 수 있습니다. 인라인으로 정의할 수 있습니다. 익명이거나 이름이 지정될 수 있습니다. 이름이 지정된 경우 이름은 해당 함수 범위 내의 함수를 나타냅니다.

    함수 표현식은 async 函数始终返回一个 Promise 并允许您使用 await를 제외하고 비동기 함수 표현식과 정확히 동일합니다.

    화살표 기능

    으아아아

    화살표 함수는 ES2015(ES6)에 도입된 함수를 정의하는 빠르고 짧은 방법입니다. 항상 익명이고 this 값이 항상 어휘적으로 바인딩된다는 점, 즉 외부 범위에서 상속된다는 점을 제외하면 대부분의 측면에서 함수 표현식과 동일합니다.

    화살표 함수는 비동기 화살표 함수와 정확히 동일합니다. async 函数始终返回一个 Promise 并允许您使用 await。 (它们在上面的语句中略有不同,因为每个异步函数内部都有多个语句。这意味着这些语句需要包含在一个块 {} 中,并且 return. (각 비동기 함수 내부에 여러 개의 명령문이 있기 때문에 위 명령문에서는 약간 다릅니다. 즉, 이러한 명령문은 {} 블록으로 묶어야 하며 return이 필요합니다. 이는 하나의 문보다 긴 일반 화살표 함수에도 해당됩니다.)

    함수 생성자

    으아아아

    함수 생성자를 사용하면 문자열을 사용하여 함수를 동적으로 정의할 수 있습니다. 이들은 항상 전역 범위에서 실행되며 정의된 범위에 액세스할 수 없습니다. 드문 경우에만 유용합니다. 개인적으로 나는 비동기 함수 생성자가 유용할 것이라고 생각하지 않습니다. ES2017의 저자는 AsyncFunction 不是全局对象,必须首先使用 const AsyncFunction = Object.getPrototypeOf(async function(){}).constructor을 얻기 때문에 나와 동의합니다.

    함수 생성자를 사용하여 생성된 함수는 async 函数始终返回一个 Promise 并允许您使用 await를 제외하고 익명 함수 생성자를 사용하여 생성된 함수와 완전히 동일합니다. (하지만 이미 짐작하셨죠?)

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