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 | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
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 |
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 | 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 | 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 Ні |