Почему такое поведение в цикле forEach?
item - переменная, переданная по значению.
arr - массив, переданный по ссылке.
item это переменная функции forEach. В каждой итерации этой переменной присваивается значение из массива. Вы перезаписывает его своим (переменную функции). После того как функция отработала ее переменные перестают существовать, массив остаётся неизменным.