Я наткнулся на метод forEach() в одном из своих упражнений и решил узнать о нем больше. Во время моего исследования я наткнулся на пример преобразования цикла for в метод forEach(). Мне это показалось удивительным, и я решил попробовать. Я написал код ниже и вызываю console.info() внутри фигурных скобок цикла, а не за их пределами. К моему величайшему удивлению, я получил в консоли больше массивов, чего я не ожидал, см.
before
const items = ["Books", "Pens", "Inks", "Ram of Sheet"];
let copyItem = [];
for(const item of items){
copyItem.push(item)
}
console.info(copyItem);//[ 'Books', 'Pens', 'Inks', 'Ram of Sheet' ]
//after
items.forEach((elem)=>{
copyItem.push(elem)
})
Это был мой Сюрприз. Я попытался предположить, что такое поведение было вызвано циклическим перебором массива элементов, в чем я также не уверен. Может кто-нибудь объяснить этот цикл лучше для моего понимания?
const items = ["Books", "Pens", "Inks", "Ram of Sheet"];
let copyItem = [];
for(const item of items){
copyItem.push(item)
console.info(copyItem);//varify position of this console!!
}
/* console output
[ 'Books' ]
[ 'Books', 'Pens' ]
[ 'Books', 'Pens', 'Inks' ]
[ 'Books', 'Pens', 'Inks', 'Ram of Sheet' ]
*/
Я не понимаю, в чем смысл вопроса. Вместо этого вам следует пройти базовое руководство по js. Он должен охватывать все основные вещи, подобные этому.
copyItem — плохое название для вашего набора предметов. Использование единственного числа вместо множественного сбивает с толку. Кроме того, ничего не копируется. Возможно, myItems будет лучшим названием для вашего набора предметов.



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Ваш код перебирает массив из четырех элементов, вызывая console.info для каждой итерации. Таким образом, вы получаете четыре итерации и, следовательно, четыре строки вывода.
Каждая строка вывода содержит состояние переменной copyItem. Поскольку ваш код помещает новый элемент в copyItem с каждой итерацией, каждая строка вывода показывает на один элемент больше, чем предыдущий.
Я думал именно об этом, но не был уверен из-за своего молодого ума в области программирования. Спасибо за ваше объяснение. Очень признателен.
причина, по которой вы видите несколько напечатанных массивов, заключается в том, что вы записываете в консоль массив, в который помещаете элементы. Каждый раз, когда вы нажимаете на элемент, вы также вызываете для него console.info(copyItem), то есть он печатает состояние текущего массива в этом цикле.
Итак, вы можете визуализировать это так:
// first loop
// you add the first item 'Books' to the copyItem array
copyItem: ['Books']
console.info(copyItem)
// second loop
// you add the second item 'Pens' to the copyItem array
copyItem: ['Books', 'Pens']
console.info(copyItem)
// this then loops for the entirety of the array
Вы удивлены, что при циклической печати печатается чаще, чем при печати один раз??