--- title: AsyncFunction slug: Web/JavaScript/Reference/Global_Objects/AsyncFunction translation_of: Web/JavaScript/Reference/Global_Objects/AsyncFunction ---
Конструктор AsyncFunction создаёт новый объект {{jsxref("Statements/async_function", "async function")}}. В JavaScript любая асинхронная функция фактически является объектом AsyncFunction.
Обратите внимание, что AsyncFunction не является глобальным объектом. Её можно получить, выполнив следующий код.
Object.getPrototypeOf(async function(){}).constructor
new AsyncFunction([arg1[, arg2[, ...argN]],] functionBody)
arg1, arg2, ... argNx", "theValue", или "a,b". functionBodyОбъекты {{jsxref("Statements/async_function", "async function")}}, созданные с помощью AsyncFunction constructor будут распарсены в момент, когда функция создаётся. Это менее эффективно, чем объявлять асинхронную функцию с помощью {{jsxref("Statements/async_function", "async function expression")}} и вызывать её внутри вашего кода, поскольку такие функции анализируются с остальной частью кода.
Все аргументы, переданные функции, рассматриваются как имена идентификаторов параметров в создаваемой функции в том порядке, в котором они передаются.
Обратите внимание: объекты {{jsxref("Statements/async_function", "async functions")}} созданные с помощью AsyncFunction constructor , не создают замыкания на создающие их контексты; Они всегда создаются в глобальной области видимости. При их запуске они смогут получить доступ только к своим локальным переменным и к глобальным переменным, но не имеют доступа к тем областям видимости, в которых был вызван AsyncFunction constructor. Это отличается от использования {{jsxref("Global_Objects/eval", "eval")}} с кодом для async function.
Вызов AsyncFunction constructor как функции (без использования оператора new ) имеет тот же эффект, что и вызов его как конструктора.
AsyncFunction.lengthAsyncFunction prototype objectЭкземпляры AsyncFunctionЭкземпляры AsyncFunction наследуют методы и свойства от {{jsxref("AsyncFunction.prototype")}}. Как и для всех конструкторов, вы можете изменить объект-прототип конструктора, чтобы внести изменения во все экземпляры AsyncFunction.
AsyncFunction constructorfunction resolveAfter2Seconds(x) {
  return new Promise(resolve => {
    setTimeout(() => {
      resolve(x);
    }, 2000);
  });
}
var AsyncFunction = Object.getPrototypeOf(async function(){}).constructor
var a = new AsyncFunction('a',
                          'b',
                          'return await resolveAfter2Seconds(a) + await resolveAfter2Seconds(b);');
a(10, 20).then(v => {
  console.log(v); // напечатает 30 через 4 секунды
});
| Спецификация | Статус | Комментарий | 
|---|---|---|
| {{SpecName('ESDraft', '#sec-async-function-objects', 'AsyncFunction object')}} | {{Spec2('ESDraft')}} | Изначальное определение в ES2017. | 
| Возможность | Chrome | Firefox (Gecko) | Internet Explorer | Edge | Opera | Safari (WebKit) | 
|---|---|---|---|---|---|---|
| Базовая поддержка | {{CompatChrome(55)}} | {{CompatGeckoDesktop("52.0")}} | {{CompatUnknown}} | {{CompatUnknown}} | {{CompatOpera(42)}} | {{CompatUnknown}} | 
| Возможность | Android | Android Webview | Firefox Mobile (Gecko) | IE Mobile | Opera Mobile | Safari Mobile | Chrome for Android | 
|---|---|---|---|---|---|---|---|
| Базовая поддержка | {{CompatUnknown}} | {{CompatUnknown}} | {{CompatGeckoMobile("52.0")}} | {{CompatUnknown}} | {{CompatOpera(42)}} | {{CompatUnknown}} | {{CompatChrome(55)}} |