Мне трудно понять и запомнить эти объекты Javascript, методы экземпляра и функции, потому что я не использую их ежедневно. Поэтому я надеюсь, что это поможет вам освежить вашу память.

Мы используем объекты для хранения нескольких значений в виде структуры данных.

Метод apply() вызывает функцию с заданным значением this и arguments, представленным в виде массива (или объекта, подобного массиву).

const numbers = [5, 6, 2, 3, 7];
const max = Math.max.apply(null, numbers);
console.log(max);
// expected output: 7
const min = Math.min.apply(null, numbers);
console.log(min);
// expected output: 2

Метод bind() создает новую функцию, которая при вызове имеет ключевое слово this, установленное в предоставленное значение, с заданной последовательностью аргументов, предшествующих любой предоставленной при вызове новой функции.

const module = {
  x: 42,
  getX: function() {
    return this.x;
  }
};
const unboundGetX = module.getX;
console.log(unboundGetX()); // The function gets invoked at the global scope
// expected output: undefined
const boundGetX = unboundGetX.bind(module);
console.log(boundGetX());
// expected output: 42

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

function Product(name, price) {
  this.name = name;
  this.price = price;
}
function Food(name, price) {
  Product.call(this, name, price);
  this.category = 'food';
}
console.log(new Food('cheese', 5).name);
// expected output: "cheese"

Функция обратного вызова — это функция, передаваемая в другую функцию в качестве аргумента, которая затем вызывается внутри внешней функции для завершения какой-либо подпрограммы или действия.

function greeting(name) {
  alert('Hello ' + name);
}

function processUserInput(callback) {
  var name = prompt('Please enter your name.');
  callback(name);
}

processUserInput(greeting);

замыкание — это комбинация функции, связанной вместе (вложенной) со ссылками на ее окружающее состояние (лексическое окружение). Другими словами, замыкание дает вам доступ к области действия внешней функции из внутренней функции. В JavaScript замыкания создаются каждый раз, когда создается функция, во время создания функции.

function init() {
  var name = 'Mozilla'; // name is a local variable created by init
  function displayName() { // displayName() is the inner function, a closure
    alert(name); // use variable declared in the parent function
  }
  displayName();
}
init();

Использованная литература:

https://developer.mozilla.org/en-US/docs/Глоссарий