> Что такое call, apply и bind в JavaScript и в чем их разница (JavaScript)

Уровень: junior · Роль: frontend · Язык: JavaScript · Категория: Технические вопросы

Компании: Mosline

Стек: Node.js, JavaScript

> Пример ответа

call, apply и bind - это методы, доступные у функций в JavaScript, которые позволяют явно задать контекст this при вызове функции. Их основное различие - в способе передачи аргументов и моменте выполнения.

  • call(thisArg, arg1, arg2, ...) - вызывает функцию немедленно, передавая аргументы по одному через запятую.
    Пример: func.call(obj, 1, 2);

  • apply(thisArg, [argsArray]) - вызывает функцию немедленно, но аргументы передаются в виде массива (или массивоподобного объекта).
    Пример: func.apply(obj, [1, 2]);

  • bind(thisArg, arg1, arg2, ...) - не вызывает функцию, а возвращает новую функцию с привязанным this и, опционально, частично заданными аргументами (каррирование). Вызвать её можно позже.
    Пример: const boundFunc = func.bind(obj, 1); boundFunc(2);

Ключевые отличия:

  • call и apply выполняются сразу, bind - отложенно.

  • call принимает аргументы списком, apply - массивом.

  • bind создаёт копию функции с фиксированным контекстом, что удобно для колбэков и событий.

Пример использования в Node.js:

JAVASCRIPT
const obj = { name: 'Node' };
function greet(greeting, punctuation) {
console.log(`${greeting}, ${this.name}${punctuation}`);
}
greet.call(obj, 'Hello', '!'); // Hello, Node!
greet.apply(obj, ['Hi', '?']); // Hi, Node?
const bound = greet.bind(obj, 'Hey');
bound('.'); // Hey, Node.

> ГОТОВЫ К СЛЕДУЮЩЕМУ СОБЕСЕДОВАНИЮ?

Запустите тренировочную сессию с ИИ и получите детальную обратную связь, чтобы увереннее проходить реальные интервью