Оголошення функції (функціональний оператор) визначає функцію з вказаними параметрами.
Ви також можете визначати функції за допомогою конструктора Function та функціонального виразу.
The source for this interactive example is stored in a GitHub repository. If you'd like to contribute to the interactive examples project, please clone https://github.com/mdn/interactive-examples and send us a pull request.
Синтаксис
function name([param[, param,[..., param]]]) {
[statements]
}
name- Ім'я функції.
param- Ім'я аргументу, що передається у функцію. Максимальна кількість аргументів відрізняється у різних рушіях.
statements- Інструкції, які складають тіло функції.
Опис
Функція, утворена через оголошення функції, є об'єктом Function, і має усі властивості, методи та поведінку об'єктів Function. Більш детальну інформацію щодо функцій дивіться у статті Function.
Функція також може бути створена через за допомогою виразу (дивіться функціональний вираз).
За замовчуванням функції повертають undefined. Щоб повернути будь-яке інше значення, функція повинна мати оператор return, який вказує значення, що буде повернене.
Умовне створення функцій
Функції можуть оголошуватися за певної умови, тобто, оголошення функції може бути вкладене у if, однак, результат різниться між реалізаціями, тому цей шаблон не варто використовувати у виробничому коді. Для умовного створення функції використовуйте, натомість, функціональний вираз.
var hoisted = "foo" in this;
console.log(`Ім'я 'foo'${hoisted ? "" : " не"} піднімається. typeof foo дорівнює ${typeof foo}`);
if (false) {
function foo(){ return 1; }
}
// У Chrome:
// Ім'я 'foo' піднімається. typeof foo дорівнює undefined
//
// У Firefox:
// Ім'я 'foo' піднімається. typeof foo дорівнює undefined
//
// У Edge:
// Ім'я 'foo' не піднімається. typeof foo дорівнює undefined
//
// У Safari:
// Ім'я 'foo' піднімається. typeof foo дорівнює function
Результат буде такий самий для умови, яка дорівнює true
var hoisted = "foo" in this;
console.log(`Ім'я 'foo' ${hoisted ? "" : " не"} піднімається. typeof foo дорівнює ${typeof foo}`);
if (true) {
function foo(){ return 1; }
}
// У Chrome:
// Ім'я 'foo' піднімається. typeof foo дорівнює undefined
//
// У Firefox:
// Ім'я 'foo' піднімається. typeof foo дорівнює undefined
//
// У Edge:
// Ім'я 'foo' не піднімається. typeof foo дорівнює undefined
//
// У Safari:
// Ім'я 'foo' піднімається. typeof foo дорівнює function
Підняття оголошення функції
Оголошення функцій у JavaScript піднімаються наверх замикаючої функції або глобальної області видимості. Ви можете використовувати функцію до того, як оголосили її:
hoisted(); // виводить "foo"
function hoisted() {
console.log('foo');
}
Зауважте, що функціональні вирази не піднімаються:
notHoisted(); // TypeError: notHoisted is not a function
var notHoisted = function() {
console.log('bar');
};
Приклади
Використання function
Наступний код оголошує функцію, яка повертає загальну суму продажів, отримуючи кількість одиниць продуктів a, b та c.
function calc_sales(units_a, units_b, units_c) {
return units_a * 79 + units_b * 129 + units_c * 699;
}
Специфікації
| Специфікація | Статус | Коментар |
|---|---|---|
| ECMAScript Latest Draft (ECMA-262) The definition of 'Function definitions' in that specification. |
Draft | |
| ECMAScript 2015 (6th Edition, ECMA-262) The definition of 'Function definitions' in that specification. |
Standard | |
| ECMAScript 5.1 (ECMA-262) The definition of 'Function definition' in that specification. |
Standard | |
| ECMAScript 3rd Edition (ECMA-262) The definition of 'Function definition' in that specification. |
Standard | |
| ECMAScript 1st Edition (ECMA-262) The definition of 'Function definition' in that specification. |
Standard | Початкове визначення. Реалізоване у JavaScript 1.0. |
Сумісність з веб-переглядачами
| Desktop | Mobile | Server | |||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
function | Chrome Full support 1 | Edge Full support 12 | Firefox Full support 1 | IE Full support 3 | Opera Full support Yes | Safari Full support Yes | WebView Android Full support 1 | Chrome Android Full support 18 | Firefox Android Full support 4 | Opera Android Full support Yes | Safari iOS Full support Yes | Samsung Internet Android Full support 1.0 | nodejs Full support Yes |
| Trailing comma in parameters | Chrome Full support 58 | Edge Full support 14 | Firefox Full support 52 | IE No support No | Opera Full support 45 | Safari ? | WebView Android Full support 58 | Chrome Android Full support 58 | Firefox Android Full support 52 | Opera Android Full support 43 | Safari iOS ? | Samsung Internet Android Full support 7.0 | nodejs Full support 8.0.0 |
Legend
- Full support
- Full support
- No support
- No support
- Compatibility unknown
- Compatibility unknown