📌 В чем различие методов call apply bind?



💬 Спрашивают в 20% собеседований



Методы call, apply и bind принадлежат к функциональному объекту Function и используются для указания контекста this при вызове функции. Хотя все три метода позволяют контролировать значение this внутри функции, между ними существуют ключевые различия в способе использования и поведении.



🤔 Сall



Вызывает функцию, явно устанавливая this в первом аргументе. Остальные аргументы передаются в вызываемую функцию как есть.



Пример:

function greet(message, name) {

console.log(${message}, ${name}. This is ${this});

}



greet.call("Earth", "Hello", "Alice"); // "Hello, Alice. This is Earth"





Здесь он используется для вызова функции greet с this, установленным в "Earth", и двумя дополнительными аргументами "Hello" и "Alice".



🤔 Apply



Очень похож на call, но принимает аргументы в виде массива, а не по отдельности.



Пример:

function greet(message, name) {

console.log(

${message}, ${name}. This is ${this}

);

}



greet.apply("Earth", ["Hello", "Alice"]); // "Hello, Alice. This is Earth"





В этом случае он вызывает функцию greet с this, установленным в "Earth", и аргументами, переданными в виде массива.



🤔 Bind



Создаёт новую функцию, которая, когда она вызывается, имеет установленный контекст this, указанный в первом аргументе. В отличие от call и apply, bind не вызывает функцию сразу, а возвращает новую функцию, которую можно вызвать позже.



Пример:

function greet(message, name) {

console.log(

${message}, ${name}. This is ${this}

);

}



const greetEarth = greet.bind("Earth", "Hello", "Alice");

greetEarth(); // "Hello, Alice. This is Earth"




Здесь он используется для создания новой функции greetEarth, которая при вызове выводит тот же результат, что и предыдущие примеры, но с тем отличием, что контекст this и аргументы были заранее заданы.



🤔 Итог:



call вызывает функцию с указанным контекстом this и отдельными аргументами.



apply аналогичен call, но принимает аргументы в виде массива.



bind создаёт новую функцию с предустановленным контекстом this и аргументами, если они были предоставлены, но не вызывает её немедленно.



Эти методы позволяют более гибко управлять контекстом выполнения функций, что является мощным инструментом, особенно при работе с объектно-ориентированным кодом и асинхронными вызовами.





🔥 ТОП ВОПРОСОВ С СОБЕСОВ



🔒 База собесов | 🔒 База тестовых