Выбор ответа Middle this, call, apply, bind обновлено

Повторный bind

Вопрос

Что выведет код?

function name() { return this.n; }
const first = name.bind({ n: 'первый' });
const second = first.bind({ n: 'второй' });
console.log(second());

Попробуйте сами

Выберите вариант, и откроется разбор.

Показать ответ и разбор

Коротко

Правильный ответ: 'первый'. bind создаёт обёртку, которая всегда вызывает исходную функцию с зафиксированным this.

Варианты ответа

  1. 'второй'
  2. 'первый'правильный ответ
  3. undefined
  4. TypeError: функцию нельзя привязать дважды

Разбор

bind создаёт обёртку, которая всегда вызывает исходную функцию с зафиксированным this. Второй bind оборачивает уже привязанную функцию: он может задать this для обёртки, но обёртка его игнорирует и использует свой { n: 'первый' }. Ошибки нет, повторный bind разрешён и даже полезен для добавления частично применённых аргументов. undefined получилось бы при обычном вызове без привязки.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.