--- title: Function slug: Web/JavaScript/Reference/Global_Objects/Function tags: - Constructor - Function - JavaScript translation_of: Web/JavaScript/Reference/Global_Objects/Function ---
{{JSRef}}

Конструктор Function створює новий об'єкт Function. Прямий виклик конструктора може створювати функції динамічно, але має проблеми з безпекою та схожі з {{jsxref("eval")}} (але менш значні) проблеми з продуктивністю. Однак, на відміну від eval, конструктор Function створює функції, які виконуються тільки у глобальній області видимості.

{{EmbedInteractiveExample("pages/js/function-constructor.html")}}

У JavaScript кожна функція є об'єктом Function. Це можна побачити за допомогою коду (function(){}).constructor === Function, який повертає true.

Синтаксис

new Function ([arg1[, arg2[, ...argN]],] functionBody)

Параметри

arg1, arg2, ... argN
Імена, які будуть використані функцією в якості імен формальних аргументів. Кожне ім'я має бути рядком, який представляє ідентифікатор JavaScript, або списком таких рядків, розділених комою; наприклад, "x", "theValue" або "a,b".
functionBody
Рядок, що містить інструкції JavaScript, які складають визначення функції.

Опис

Об'єкти Function, створені конструктором Function, аналізуються, коли створюється функція. Це менш ефективно, ніж оголошувати функцію функціональним виразом або оголошенням функції та викликати її, бо такі функції аналізуються разом з рештою коду.

Усі аргументи, передані у функцію, сприймаються як імена ідентифікаторів параметрів функції, що має бути створена, в тому порядку, в якому вони передані.

Виклик конструктора Function у вигляді функції (без оператора new) має той самий ефект, що й виклик конструктора.

Властивості та методи об'єкта Function

Глобальний об'єкт Function не має власних методів та властивостей, однак, він успадковує деякі методи та властивості через ланцюжок прототипів від {{jsxref("Function.prototype")}}.

Об'єкт прототипу Function

Властивості

{{page('/uk/docs/Web/JavaScript/Reference/Global_Objects/Function/prototype', 'Властивості')}}

Методи

{{page('/uk/docs/Web/JavaScript/Reference/Global_Objects/Function/prototype', 'Методи')}}

Екземпляри Function

Екземпляри Function успадковують методи та властивості від {{jsxref("Function.prototype")}}. Як і в усіх конструкторах, ви можете змінити об'єкт прототипу конструктора, щоб внести зміни до усіх екземплярів Function.

Приклади

Визначення аргументів у конструкторі Function

Наступний код створює об'єкт Function, що приймає два аргументи.

// Цей приклад можна запустити прямо у консолі JavaScript

// Створити функцію, що приймає два аргументи та повертає суму цих аргументів
var adder = new Function('a', 'b', 'return a + b');

// Виклик функції
adder(2, 6);
// > 8

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

Різниця між конструктором Function та оголошенням функції

Функції, створені конструктором Function, не утворюють замикань з контекстом свого cтворення; вони завжди cтворюються у глобальній області видимості. Під час виконання вони матимуть доступ лише до власних локальних змінних та глобальних змінних, а не до змінних з області видимості, де був створений конструктор Function. Це відрізняється від {{jsxref("eval")}} з кодом функціонального виразу.

var x = 10;

function createFunction1() {
    var x = 20;
    return new Function('return x;'); // цей |x| звертається до глобального |x|
}

function createFunction2() {
    var x = 20;
    function f() {
        return x; // цей |x| звертається до локального |x|, записаного вище
    }
    return f;
}

var f1 = createFunction1();
console.log(f1());          // 10
var f2 = createFunction2();
console.log(f2());          // 20

В той час, як цей код працює у веб-переглядачах, f1() спричинить ReferenceError у Node.js, через те, що x не буде знайдено. Це відбувається тому, що область видимості верхнього рівня у Node не є глобальною областю видимості, і x буде локальною змінною модуля.

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

Специфікація Статус Коментар
{{SpecName('ES1')}} {{Spec2('ES1')}} Початкове визначення. Реалізоване у JavaScript 1.0.
{{SpecName('ES5.1', '#sec-15.3', 'Function')}} {{Spec2('ES5.1')}}
{{SpecName('ES6', '#sec-function-objects', 'Function')}} {{Spec2('ES6')}}
{{SpecName('ESDraft', '#sec-function-objects', 'Function')}} {{Spec2('ESDraft')}}

Сумісність з веб-переглядачами

{{Compat("javascript.builtins.Function")}}

Див. також