방금 async 函数
에 대해 읽고 ES2017의 몇 가지 유사한 기능을 발견했습니다. 많은 혼란을 야기하고 있어 묻고 싶습니다.
async function
、AsyncFunction
(비동기 함수를 만드는 데 사용됨)과 비동기 함수 표현식(다른 비동기 함수일 뿐이라고 생각함)의 차이점은 무엇인가요? 모두의 개성과 퍼포먼스를 하이라이트로 올려주시면 감사하겠습니다!
P粉2877263082024-03-26 00:44:29
Javascript에서 함수를 만드는 방법에는 네 가지가 있습니다. Javascript에는 서로 정확히 동일한 비동기 함수를 생성하는 네 가지 방법이 있습니다.
이것이 어떻게 작동하는지 보여주기 위해 전역적으로 선언된 간단한 sleep
함수를 사용했습니다.
이것은 함수를 선언하는 가장 간단한 방법입니다. 한 번 선언하면 현재 함수 범위의 맨 위로 끌어올려질 수 있습니다.
함수 선언은 async
函数始终返回一个 Promise 并允许您使用 await
를 제외하고 비동기 함수 선언과 정확히 동일합니다.
함수 표현식은 함수 선언과 매우 유사합니다. 그러나 함수 범위의 맨 위로 승격되지는 않습니다. 필요한 만큼 여러 번 재정의할 수 있습니다. 인라인으로 정의할 수 있습니다. 익명이거나 이름이 지정될 수 있습니다. 이름이 지정된 경우 이름은 해당 함수 범위 내의 함수를 나타냅니다.
함수 표현식은 async
函数始终返回一个 Promise 并允许您使用 await
를 제외하고 비동기 함수 표현식과 정확히 동일합니다.
화살표 함수는 ES2015(ES6)에 도입된 함수를 정의하는 빠르고 짧은 방법입니다. 항상 익명이고 this
값이 항상 어휘적으로 바인딩된다는 점, 즉 외부 범위에서 상속된다는 점을 제외하면 대부분의 측면에서 함수 표현식과 동일합니다.
화살표 함수는 비동기 화살표 함수와 정확히 동일합니다. async
函数始终返回一个 Promise 并允许您使用 await
。 (它们在上面的语句中略有不同,因为每个异步函数内部都有多个语句。这意味着这些语句需要包含在一个块 {}
中,并且 return
. (각 비동기 함수 내부에 여러 개의 명령문이 있기 때문에 위 명령문에서는 약간 다릅니다. 즉, 이러한 명령문은 {}
블록으로 묶어야 하며 return code>이 필요합니다. 이는 하나의 문보다 긴 일반 화살표 함수에도 해당됩니다.)
함수 생성자를 사용하면 문자열을 사용하여 함수를 동적으로 정의할 수 있습니다. 이들은 항상 전역 범위에서 실행되며 정의된 범위에 액세스할 수 없습니다. 드문 경우에만 유용합니다. 개인적으로 나는 비동기 함수 생성자가 유용할 것이라고 생각하지 않습니다. ES2017의 저자는 AsyncFunction
不是全局对象,必须首先使用 const AsyncFunction = Object.getPrototypeOf(async function(){}).constructor
을 얻기 때문에 나와 동의합니다.
함수 생성자를 사용하여 생성된 함수는 async
函数始终返回一个 Promise 并允许您使用 await
를 제외하고 익명 함수 생성자를 사용하여 생성된 함수와 완전히 동일합니다. (하지만 이미 짐작하셨죠?)