Разница между .call()
, .apply()
и .bind()
?
В JavaScript методы .call(), .apply() и .bind() используются для управления контекстом выполнения функций, т.е. для указания, каким объектом будет this
внутри функции.
1. .call()
Метод .call()
вызывает функцию с явным указанием контекста this
и аргументами, переданными по отдельности.
function greet(greeting, punctuation) {
console.log(greeting + ', ' + this.name + punctuation);
}
const person = { name: 'Alice' };
greet.call(person, 'Hello', '!'); // Output: "Hello, Alice!"
- Аргументы передаются через запятую.
2. .apply()
Метод .apply()
схож с .call()
, но аргументы передаются в виде массива.
greet.apply(person, ['Hi', '...']); // Output: "Hi, Alice..."
- Аргументы передаются в массиве.
3. .bind()
Метод .bind()
не вызывает функцию немедленно, а возвращает новую функцию с указанным контекстом this
, которая может быть вызвана позже.
const greetPerson = greet.bind(person, 'Hey', '.');
greetPerson(); // Output: "Hey, Alice."
-
Возвращает новую функцию, связанную с переданным контекстом
this
. -
Позволяет передавать частичные аргументы (каррирование).
-
.call() — вызывает функцию с контекстом и аргументами, переданными по отдельности.
-
.apply() — вызывает функцию с контекстом и аргументами в виде массива.
-
.bind() — возвращает новую функцию с указанным контекстом, но не вызывает её сразу.