Что выведет код Junior this, call, apply, bind обновлено

Одолженный метод со стрелкой внутри

Вопрос

Что выведет код? По строке на каждый вывод.

const team = {
  name: 'core',
  members: ['Аня', 'Оля'],
  list() {
    return this.members.map((m) => m + '@' + this.name);
  },
};
console.log(team.list().join(', '));
const other = { name: 'web', members: ['Катя'], list: team.list };
console.log(other.list().join(', '));

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

Напишите, что выведет код: каждый вывод с новой строки.

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

Коротко

Код выведет: Аня@core, Оля@core, Катя@web. list обычный метод, его this определяется вызовом. team.list() даёт this === team, а стрелка внутри map берёт тот же this: Аня@core, Оля@core.

Что выведет

Аня@core, Оля@core
Катя@web

Разбор

list обычный метод, его this определяется вызовом. team.list() даёт this === team, а стрелка внутри map берёт тот же this: Аня@core, Оля@core. Метод скопирован в other и вызван как other.list(), поэтому this === other, и стрелка видит уже его: Катя@web.

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

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