Function

Об'єкт Function (функція) надає методи для функцій. У JavaScript кожна функція насправді є об'єктом Function.

Конструктор

Function()

Створює новий об'єкт Function. За допомогою безпосереднього виклику конструктора можна динамічно створювати функції, але це призводить до проблем безпеки, а також проблем продуктивності, подібних (проте куди менш суттєвих) до проблем eval(). А проте, на відміну від eval(), конструктор Function створює функції, що виконуються лише у глобальній області видимості.

Властивості примірників

Ці властивості визначені на Function.prototype і є спільними для всіх примірників Function.

Function.prototype.arguments

Представляє аргументи, передані до цієї функції. Для функцій у суворому режимі, стрілкових, асинхронних і генераторних функцій звертання до властивості arguments призводить до викидання TypeError. Замість цього слід використовувати об'єкт arguments всередині замикань функцій.

Function.prototype.caller

Представляє функцію, яка закликала поточну функцію. Для функцій у суворому режимі, стрілкових, асинхронних і генераторних функцій звертання до властивості caller призводить до викидання TypeError.

Function.prototype.constructor

Функція-конструктор, що створила поточний об'єкт-примірник. Для примірників Function початкове значення – це конструктор Function.

Ці властивості є власними для кожного окремого примірника Function.

displayName Необов'язкове

Показне ім'я функції.

length

Задає кількість аргументів, очікуваних функцією.

name

Назва функції.

prototype

Використовується тоді, коли функція використовується як конструктор за участі оператора new. Це значення стає прототипом нового об'єкта.

Методи примірників

Function.prototype.apply()

Викликає функцію, застосовуючи передане значення this і необов'язкові аргументи, передані в вигляді масиву (або масивоподібного об'єкта).

Function.prototype.bind()

Створює нову функцію, яка, якщо її викликати, має своє ключове слово this, якому призначено передане значення, необов'язково – з переданою послідовністю аргументів, що передують будь-яким аргументам, переданим при виклику цієї нової функції.

Function.prototype.call()

Викликає функцію з переданими значенням this і необов'язковими аргументами.

Function.prototype.toString()

Повертає рядок, що представляє вихідний код функції. Переважає метод Object.prototype.toString.

Function.prototype[Symbol.hasInstance]()

Задає усталену процедуру для визначення того, чи впізнає функція-конструктор об'єкт як один зі своїх примірників. Викликається оператором instanceof.

Приклади

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

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

// Створити глобальну властивість за допомогою `var`
var x = 10;

function createFunction1() {
  const x = 20;
  return new Function("return x;"); // цей `x` посилається на глобальний `x`
}

function createFunction2() {
  const x = 20;
  function f() {
    return x; // цей `x` посилається на локальний `x` вище
  }
  return f;
}

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

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

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

Сумісність із браузерами

desktop mobile server
Chrome Edge Firefox Internet Explorer Opera Safari WebView Android Chrome Android Firefox for Android Opera Android Safari on iOS Samsung Internet Deno Node.js
Function
Chrome Full support 1
Edge Full support 12
Firefox Full support 1
Internet Explorer Full support 4
Opera Full support 3
Safari Full support 1
WebView Android Full support 1
Chrome Android Full support 18
Firefox for Android Full support 4
Opera Android Full support 10.1
Safari on iOS Full support 1
Samsung Internet Full support 1.0
Deno Full support 1.0
Node.js Full support 0.10.0
Function() constructor Chrome Full support 1
Edge Full support 12
Firefox Full support 1
Internet Explorer Full support 4
Opera Full support 3
Safari Full support 1
WebView Android Full support 1
Chrome Android Full support 18
Firefox for Android Full support 4
Opera Android Full support 10.1
Safari on iOS Full support 1
Samsung Internet Full support 1.0
Deno Full support 1.0
Node.js Full support 0.10.0
apply Chrome Full support 1
Edge Full support 12
Firefox Full support 1
Internet Explorer Full support 5.5
Opera Full support 4
Safari Full support 1
WebView Android Full support 1
Chrome Android Full support 18
Firefox for Android Full support 4
Opera Android Full support 10.1
Safari on iOS Full support 1
Samsung Internet Full support 1.0
Deno Full support 1.0
Node.js Full support 0.10.0
ES 5.1: generic array-like object as arguments
Chrome Full support 17
Edge Full support 12
Firefox Full support 4
Internet Explorer Full support 9
Opera Full support 5
Safari Full support 6
WebView Android Full support 37
Chrome Android Full support 18
Firefox for Android Full support 4
Opera Android Full support 10.1
Safari on iOS Full support 6
Samsung Internet Full support 1.0
Deno Full support 1.0
Node.js Full support 0.10.0
arguments
Нерекомендоване Нестандартне
Chrome Full support 1
Edge Full support 12
Firefox Full support 1
Internet Explorer Full support 4
Opera Full support 3
Safari Full support 1
WebView Android Full support 1
Chrome Android Full support 18
Firefox for Android Full support 4
Opera Android Full support 10.1
Safari on iOS Full support 1
Samsung Internet Full support 1.0
Deno Full support 1.0
Node.js Full support 0.10.0
bind Chrome Full support 7
Edge Full support 12
Firefox Full support 4
Internet Explorer Full support 9
Opera Full support 11.6
Safari Full support 5.1
WebView Android Full support 4
Chrome Android Full support 18
Firefox for Android Full support 4
Opera Android Full support 12
Safari on iOS Full support 6
Samsung Internet Full support 1.0
Deno Full support 1.0
Node.js Full support 0.10.0
call Chrome Full support 1
Edge Full support 12
Firefox Full support 1
Internet Explorer Full support 5.5
Opera Full support 4
Safari Full support 1
WebView Android Full support 1
Chrome Android Full support 18
Firefox for Android Full support 4
Opera Android Full support 10.1
Safari on iOS Full support 1
Samsung Internet Full support 1.0
Deno Full support 1.0
Node.js Full support 0.10.0
footnote
caller
Нестандартне
Chrome Full support 1
Edge Full support 12
Firefox Full support 1
Internet Explorer Full support 8
Opera Full support 9.6
Safari Full support 3
WebView Android Full support 1
Chrome Android Full support 18
Firefox for Android Full support 4
Opera Android Full support 10.1
Safari on iOS Full support 1
Samsung Internet Full support 1.0
Deno Full support 1.0
Node.js Full support 0.10.0
displayName
Нестандартне
Chrome No support Ні
Edge No support Ні
Firefox Full support 13
Internet Explorer No support Ні
Opera No support Ні
Safari No support Ні
WebView Android No support Ні
Chrome Android No support Ні
Firefox for Android Full support 14
Opera Android No support Ні
Safari on iOS No support Ні
Samsung Internet No support Ні
Deno No support Ні
Node.js No support Ні
length Chrome Full support 1
Edge Full support 12
Firefox Full support 1
Internet Explorer Full support 4
Opera Full support 3
Safari Full support 1
WebView Android Full support 1
Chrome Android Full support 18
Firefox for Android Full support 4
Opera Android Full support 10.1
Safari on iOS Full support 1
Samsung Internet Full support 1.0
Deno Full support 1.0
Node.js Full support 0.10.0
Configurable: true
Chrome Full support 43
Edge Full support 12
Firefox Full support 37
Internet Explorer No support Ні
Opera Full support 30
Safari Full support 10
WebView Android Full support 43
Chrome Android Full support 43
Firefox for Android Full support 37
Opera Android Full support 30
Safari on iOS Full support 10
Samsung Internet Full support 4.0
Deno Full support 1.0
Node.js Full support 4.0.0
name Chrome Full support 15
Edge Full support 14
Firefox Full support 1
Internet Explorer No support Ні
Opera Full support 10.5
Safari Full support 6
WebView Android Full support 1
Chrome Android Full support 18
Firefox for Android Full support 4
Opera Android Full support 11
Safari on iOS Full support 6
Samsung Internet Full support 1.0
Deno Full support 1.0
Node.js Full support 0.10.0
Configurable: true
Chrome Full support 43
Edge Full support 14
Firefox Full support 38
Internet Explorer No support Ні
Opera Full support 30
Safari Full support 10
WebView Android Full support 43
Chrome Android Full support 43
Firefox for Android Full support 38
Opera Android Full support 30
Safari on iOS Full support 10
Samsung Internet Full support 4.0
Deno Full support 1.0
Node.js Full support 4.0.0
Inferred names on anonymous functions
Chrome Full support 51
Edge Partial support 14
footnote
Firefox Full support 53
Internet Explorer No support Ні
Opera Full support 38
Safari Full support 10
WebView Android Full support 51
Chrome Android Full support 51
Firefox for Android Full support 53
Opera Android Full support 41
Safari on iOS Full support 10
Samsung Internet Full support 5.0
Deno Full support 1.0
Node.js Full support 6.5.0
toSource
Нестандартне
Chrome No support Ні
Edge No support Ні
Firefox No support 1 –  74
footnote
Internet Explorer No support Ні
Opera No support Ні
Safari No support Ні
WebView Android No support Ні
Chrome Android No support Ні
Firefox for Android Full support 4
Opera Android No support Ні
Safari on iOS No support Ні
Samsung Internet No support Ні
Deno No support Ні
Node.js No support Ні
toString Chrome Full support 1
Edge Full support 12
Firefox Full support 1
Internet Explorer Full support 5
Opera Full support 3
Safari Full support 1
WebView Android Full support 1
Chrome Android Full support 18
Firefox for Android Full support 4
Opera Android Full support 10.1
Safari on iOS Full support 1
Samsung Internet Full support 1.0
Deno Full support 1.0
Node.js Full support 0.10.0
Implements Function.prototype.toString revision
Chrome No support Ні
Edge No support Ні
Firefox Full support 54
Internet Explorer No support Ні
Opera No support Ні
Safari No support Ні
WebView Android No support Ні
Chrome Android No support Ні
Firefox for Android Full support 54
Opera Android No support Ні
Safari on iOS No support Ні
Samsung Internet No support Ні
Deno No support Ні
Node.js No support Ні

Дивіться також