Вираз function
Ключове слово function
(функція) можна використовувати для визначення функції всередині виразу.
Визначати функції також можна за допомогою оголошення функції та стрілкового синтаксису.
Спробуйте його в дії
Синтаксис
function (param0) {
інструкції
}
function (param0, param1) {
інструкції
}
function (param0, param1, /* …, */ paramN) {
інструкції
}
function name(param0) {
інструкції
}
function name(param0, param1) {
інструкції
}
function name(param0, param1, /* …, */ paramN) {
інструкції
}
[!NOTE] Запис інструкції-виразу не може починатися зі слова
function
, щоб уникнути плутанини щодо оголошення функції. Ключове словоfunction
починає вираз тільки тоді, коли з'являється в контексті, де інструкцій бути не може.
Параметри
name
Необов'язковеІм'я функції. Можна опустити, і в цьому випадку функція буде анонімною. Ім'я є локальним лише для тіла функції.
paramN
Необов'язковеНазва формального параметра для функції. Синтаксис параметрів дивіться у Довідці про функції.
statements
Необов'язковеІнструкції, що утворюють тіло функції.
Опис
Вираз function
дуже схожий та має практично той самий синтаксис, що й оголошення function
. Основна відмінність між виразом function
та оголошенням function
полягає в імені функції, яке можна опустити у виразі функції
, створивши її анонімною. Вираз function
можна використовувати як IIFE (зразу закличний вираз функції), функцію, яка запускається одразу після визначення. Дивіться докладніше в розділі про функції.
Підняття виразу функції
Вирази функцій у JavaScript не мають підняття, на відміну від оголошень функцій. Не можна використовувати вирази функцій до їх створення:
console.log(notHoisted); // undefined
// Незважаючи на те, що назва змінної піднімається,
// визначення - ні. Тому це undefined.
notHoisted(); // TypeError: notHoisted is not a function
var notHoisted = function () {
console.log("bar");
};
Іменований вираз функції
Якщо ви хочете посилатися на поточну функцію всередині її тіла, потрібно створити іменований вираз функції. Це ім'я буде локальним лише для тіла функції (її області видимості). Це дає змогу не використовувати для рекурсивного виклику функції нерекомендовану властивість arguments.callee
.
const math = {
factorial: function factorial(n) {
console.log(n);
if (n <= 1) {
return 1;
}
return n * factorial(n - 1);
},
};
math.factorial(3); //3;2;1;
Якщо вираз функції є іменованим, властивість функції name
встановлюється як її ім'я, замість неявного імені, виведеного з синтаксису (наприклад, змінна, до якої присвоюється функція).
На відміну від оголошення функції, ім'я виразу функції доступне лише для читання.
function foo() {
foo = 1;
}
foo();
console.log(foo); // 1
(function foo() {
foo = 1; // TypeError: Assignment to constant variable.
})();
Приклади
Використання виразу функції
У наступному прикладі визначається та присвоюється сталій x
функція без імені. Ця функція повертає квадрат свого аргументу:
const x = function (y) {
return y * y;
};
Використання функції як зворотного виклику
Найчастіше такі функції використовуються як функції зворотного виклику:
button.addEventListener("click", function (event) {
console.log("кнопку клацнуто!");
});
Використання зразу закличного виразу функції (IIFE)
Створюється та викликається анонімна функція:
(function () {
console.log("Код працює!");
})();
// або
!function () {
console.log("Код працює!");
}();
Специфікації
Сумісність із браузерами
desktop | mobile | server | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
function expression
|
Chrome Full support 1 | Edge Full support 12 | Firefox Full support 1 | Internet Explorer Full support 3 | 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 |
Trailing comma in parameters
|
Chrome Full support 58 | Edge Full support 14 | Firefox Full support 52 | Internet Explorer No support Ні | Opera Full support 45 | Safari Full support 10 | WebView Android Full support 58 | Chrome Android Full support 58 | Firefox for Android Full support 52 | Opera Android Full support 43 | Safari on iOS Full support 10 | Samsung Internet Full support 7.0 | Deno Full support 1.0 | Node.js Full support 8.0.0 |
Дивіться також
- Посібник Функції
- Функції
function
Function
- Стрілкові функції