.bind() создает постоянную контекстную ссылку и всегда будет ее сохранять. Связанная функция не может изменить свой связанный контекст при использовании .call() или .apply() с другим контекстом и даже повторное связывание не возымеет никакого эффекта.
Только вызов конструктора связанной функции может изменить уже связанный контекст; однако так обычно не делают (при вызове конструктора должны использоваться обычные, несвязанные функции).
В следующем примере создается связанная функция, а затем делается попытка изменить ее уже предопределенный контекст:
function getThis() {
'use strict';
return this;
}
const one = getThis.bind(1);
one(); // => 1
one.call(2); // => 1
one.apply(2); // => 1
one.bind(2)(); // => 1
new one(); // => Object
Только new one() изменяет контекст связанной функции. В других типах вызовов this всегда будет 1.