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

this во вложенной функции

Вопрос

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

const obj = {
  items: [1, 2],
  sumRegular() {
    let total = 0;
    this.items.forEach(function () { total += this === undefined ? 1 : 100; });
    return total;
  },
  sumArrow() {
    let total = 0;
    this.items.forEach(() => { total += this === obj ? 1 : 100; });
    return total;
  },
};
console.log(obj.sumRegular());
console.log(obj.sumArrow());

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

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

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

Коротко

Код выведет: 2, 2. Почему так В строгом режиме this обычной функции-колбэка равен undefined.

Что выведет

2
2

Разбор

Почему так

В строгом режиме this обычной функции-колбэка равен undefined. Стрелка берёт this лексически, из метода. Отсюда правило: колбэки внутри методов пишут стрелками (или передают thisArg вторым аргументом forEach).

Вывод

2
2

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

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