Skip to main content

call vs apply

Коротко:

МетодЯк передаються аргументиПриклад виклику
callперелічуються через комуfunc.call(thisArg, arg1, arg2, arg3)
applyпередаються у вигляді масивуfunc.apply(thisArg, [arg1, arg2, arg3])

Приклад для наочності

javascript
function greet(city, job) { console.log(`Я ${this.name} з ${city}, працюю як ${job}`); } const user = { name: 'Богдан' }; // call - аргументи через кому greet.call(user, 'Київ', 'Frontend-розробник'); // apply - аргументи масивом greet.apply(user, ['Київ', 'Frontend-розробник']);

Обидва виклики виведуть:

javascript
Я Богдан з Київ, працюю як Frontend-розробник

Коли використовувати який

СценарійКраще використовувати
Аргументи заздалегідь відоміcall
Аргументи вже знаходяться в масивіapply

Приклад: масив аргументів

javascript
function sum(a, b, c) { return a + b + c; } const nums = [1, 2, 3]; // Без apply - довелося б писати вручну console.log(sum.call(null, nums[0], nums[1], nums[2])); // З apply - просто передаємо масив console.log(sum.apply(null, nums)); // 6

Сучасний аналог зі Spread

У сучасних версіях JS (ES6+) apply часто замінюють оператором spread:

javascript
const nums = [1, 2, 3]; console.log(sum(...nums)); // той самий результат, що і sum.apply(null, nums)

Підсумок

Властивістьcallapply
Контекст (this)Явно вказується першим аргументомТе саме
Передача аргументівЧерез комуМасивом
ПовертаєРезультат функціїРезультат функції
Викликає одразутактак
Сучасна альтернативаSpread: func(...args)Spread: func(...args)

Коротка відповідь

Для співбесіди
Premium

Коротка відповідь допоможе вам впевнено відповідати на цю тему під час співбесіди.