Оголошення функцій
1) Function declaration (оголошення функції)
javascript
function sum(a, b) {
return a + b;
}- hoisting (можна викликати до оголошення).
- Має власний
thisпри виклику як методу/функції. - Можна використовувати як конструктор (
new sum()).
2) Function expression (функціональний вираз)
javascript
const mul = function(a, b) {
return a * b;
};- Немає hoisting (доступна після присвоєння).
- Може бути анонімною або іменованою:
javascript
const fact = function factorial(n) { /* ... */ }; // іменована - ім'я доступне всередині функції3) Arrow function (стрілкові функції)
javascript
const inc = x => x + 1;
const sum = (a, b) => a + b;- Лексичний
this-thisбереться із зовнішнього лексичного оточення. - Немає
arguments(можна використовувати rest...args). - Не можна використовувати як конструктор (
new), немаєprototype. - Чудово підходять для колбеків і коротких функцій.
4) Function constructor
javascript
const fn = new Function('a', 'b', 'return a + b');- Створює функцію з рядка (як
eval). - Не рекомендується: проблеми з безпекою та продуктивністю.
5) Generator function (function*)
javascript
function* idGenerator() {
let i = 0;
while (true) {
yield i++;
}
}- Повертає ітератор; підтримує
yield. - Можна призупиняти/відновлювати виконання.
6) Async function
javascript
async function fetchData() {
const r = await fetch('/api');
return r.json();
}
const fn = async () => { /* теж можливо */ };- Повертає
Promise. - Можна використовувати
awaitвсередині.
7) Method definitions в об'єктах (shorthand)
javascript
const obj = {
sayHi() { console.log('hi'); }, // метод
async load() { await fetch('/'); } // async-метод
};- Зручно для методів; у них є
[[HomeObject]]- підтримкаsuper. - Можна також писати як
prop: function() {}- це звичайний функціональний вираз.
8) Class methods (всередині class)
javascript
class C {
method() {}
static staticMethod() {}
async asyncMethod() {}
}- Методи класу - немає hoisting, використовуються з екземплярами/класом, підтримують
super.
9) IIFE - Immediately Invoked Function Expression
javascript
(function() {
// виконується негайно
})();- Корисно для локальної області видимості (раніше - до модулів).
10) Function.prototype.bind (створення зв'язаної функції)
javascript
function f() { console.log(this); }
const bound = f.bind({x:1});- Повертає нову функцію із зафіксованим
thisта/або частково застосованими аргументами.
Коротка відповідь
Для співбесідиPremium
Коротка відповідь допоможе вам впевнено відповідати на цю тему під час співбесіди.