Может кто-нибудь объяснить поведение console.info() в цикле for ниже

Я наткнулся на метод 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' ]

*/

Вы удивлены, что при циклической печати печатается чаще, чем при печати один раз??

luk2302 11.06.2024 20:19

Я не понимаю, в чем смысл вопроса. Вместо этого вам следует пройти базовое руководство по js. Он должен охватывать все основные вещи, подобные этому.

Chris G 11.06.2024 20:24
copyItem — плохое название для вашего набора предметов. Использование единственного числа вместо множественного сбивает с толку. Кроме того, ничего не копируется. Возможно, myItems будет лучшим названием для вашего набора предметов.
Wyck 11.06.2024 20:47
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
3
3
63
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ваш код перебирает массив из четырех элементов, вызывая console.info для каждой итерации. Таким образом, вы получаете четыре итерации и, следовательно, четыре строки вывода.

Каждая строка вывода содержит состояние переменной copyItem. Поскольку ваш код помещает новый элемент в copyItem с каждой итерацией, каждая строка вывода показывает на один элемент больше, чем предыдущий.

Я думал именно об этом, но не был уверен из-за своего молодого ума в области программирования. Спасибо за ваше объяснение. Очень признателен.

emjKamara 11.06.2024 20:47
Ответ принят как подходящий

причина, по которой вы видите несколько напечатанных массивов, заключается в том, что вы записываете в консоль массив, в который помещаете элементы. Каждый раз, когда вы нажимаете на элемент, вы также вызываете для него 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


Другие вопросы по теме