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