Объясните про forEach?
Это удобно использовать в случае использования именованной функции в качестве коллбека для forEach.
Так как функция может быть определена где-то в другом месте (например мы ее импортируем из другого модуля), она может не иметь доступа к области видимости в которой хранится массив использующий ее.
Также, даже если из функции доступен массив из внешней области видимости — все равно хорошим тоном считается использование аргумента функции.arr.forEach(doSomeStuffForEveryItem);

function doSomeStuffForEveryItem(item, i, arr) {
  теперь тут arr доступен через переменную.
}
Но ведь массив который перебирается задаётся сразу перед методом
Массив не задается, нем лишь вызывается метод. Задаете вы его выше.Для чего его пихать ещё и в callback-функцию-то, не пойму?
Колбек функция может передаваться из другого места и при этом использовать массив.arr.forEach(callback);