Раннее и позднее связывание относится к тому, как и когда определяется контекст вызова “this” в функции.

Раннее связывание происходит во время компиляции, когда JavaScript создает скрытый объект, который будет использоваться в качестве контекста вызова “this” в функции.

Пример раннего связывания:

function myFunction() {
  console.log(this)
}
 
myFunction() // контекст вызова "this" будет глобальным объектом Window

Позднее связывание происходит во время выполнения, когда функция вызывается, и контекст вызова “this” определяется на основе того, где и как она вызывается.

Пример позднего связывания:

const myObject = {
  myMethod() {
    console.log(this)
  },
}
 
const myFunction = myObject.myMethod
myFunction() // контекст вызова "this" будет глобальным объектом Window

В этом примере, контекст вызова “this” будет глобальным объектом Window при использовании раннего связывания, тогда как при использовании позднего связывания, контекст вызова “this” будет объектом “myObject”.

Ещё один пример:

Обычный метод bind называется «ранним связыванием», поскольку фиксирует привязку сразу же. Как только значения привязаны — они уже не могут быть изменены. В том числе, если метод объекта, который привязали, кто-то переопределит — «привязанная» функция этого не заметит.

*Позднее связывание — более гибкое, оно позволяет переопределить привязанный метод когда угодно. call вызывает функцию с заданным контекстом, а bind, по своей сути есть обертка, привязывающая контекст, которую можно передать в функцию.*

call - позднее связывание, bind - раннее связывание.


Назад