Конструктор Function()

Baseline Widely available

This feature is well established and works across many devices and browser versions. It’s been available across browsers since July 2015.

Конструктор Function создаёт новый объект Function. Вызов конструктора напрямую позволяет создавать функции программным путём, однако такой способ представляет угрозу для безопасности, а также несёт разные (хотя не такие значительные) проблемы с производительностью при использовании с Global_Objects/eval. Однако в отличие от eval, конструктор Function создаёт функции, выполняемые только в глобальной области видимости.

Интерактивный пример

Синтаксис

js
new Function(arg1, functionBody)
new Function(arg1, arg2, functionBody)
new Function(arg1, ... , argN, functionBody)

Параметры

arg1, arg2, ... argN

Имена, используемые функцией в качестве имён формальных аргументов. Каждое имя должно быть строкой с правильным JavaScript-значением (либо идентификатором, оставшимся параметром, или деструктурирующим присваиванием, либо списком таких строк, разделённых запятой.

Поскольку параметры разбираются так же, как и объявления функций, допускается использование пробелов и комментариев. Например: "x", "theValue = 42", "[a, b] /* numbers */" — или "x, theValue = 42, [a, b] /* numbers */". ("x, theValue = 42", "[a, b]" также будет правильным, хотя трудно читаемым).

functionBody

Строка, содержащая инструкции JavaScript, составляющие определение функции.

Описание

Объекты Function, созданные конструктором Function, разбираются при создании функции. Определение функции при помощи выражения function или инструкции function и вызова её внутри вашего кода более эффективно, поскольку такие функции разбираются вместе с остальным кодом.

Все аргументы, переданные в функцию, трактуются как имена идентификаторов параметров создаваемой функции, и имеют тот же порядок следования, что и при их передаче в конструктор функции. Если опустить аргумент, то значение этого параметра будет undefined.

Вызов конструктора Function как функции (без использования оператора new) имеет тот же самый эффект, что и вызов его как конструктора.

Примеры

Пример: указание аргументов в конструкторе Function

Следующий код создаёт объект `Function, который принимает два аргумента.

js
// Пример может быть запущен непосредственно в вашей консоли JavaScript

// Создаём функцию, принимающую два аргумента, и возвращающую их сумму
const adder = new Function("a", "b", "return a + b");

// Вызываем функцию
adder(2, 6);
// 8

Аргументы "a" и "b" являются именами формальных аргументов, которые используются в теле функции, "return a + b".

Спецификации

Specification
ECMAScript Language Specification
# sec-function-constructor

Совместимость с браузерами

BCD tables only load in the browser

Смотрите также