Sobes.tech
Back to questions
Middle+
250

Если последовательно забиндеровать несколько контекстов, какой контекст окажется в итоге?

Answer from AI

sobes.tech AI

Если последовательно забиндеровать несколько контекстов (например, в Node.js с использованием Function.prototype.bind), итоговый контекст будет тот, который был передан в последнем вызове bind.

Каждый вызов bind создаёт новую функцию с фиксированным значением this. Если вызвать bind повторно на уже забинденной функции, новый контекст перезапишет предыдущий.

Пример:

function show() {
  console.log(this.name);
}

const obj1 = { name: 'Obj1' };
const obj2 = { name: 'Obj2' };

const bound1 = show.bind(obj1);
const bound2 = bound1.bind(obj2);

bound2(); // Выведет 'Obj1', так как bind не меняет контекст повторно

Однако, важно отметить, что в JavaScript повторный bind на уже забинденной функции не изменяет контекст — сохраняется первый bind. То есть, первый bind фиксирует контекст навсегда.

Если же речь о других механизмах биндинга контекста (например, в библиотеках с вложенными контекстами), то обычно последний применённый контекст имеет приоритет.