Всем привет, не подскажете почему счетчик counter не увеличивается при инкременте? По идее ведь у меня три картины и трижды должен сработать
function preloadImages(sources) {
let counter = 0;
for (const source of sources) {
let img = document.createElement('img');
img.onerror = img.onload = () => {
counter++;
}
img.src = source;
}
console.log(counter);
}
let sources = [
"https://en.js.cx/images-load/1.jpg",
"https://en.js.cx/images-load/2.jpg",
"https://en.js.cx/images-load/3.jpg"
];
preloadImages(sources);
При проверке внутри цикла переменная увеличивается, но не выходит будто из этого цикла. Срабатывает если функцию отдельно написать для события. Событие не позволяет изменять значение внешней переменной или что?
ну по идее у вас все ок, просто загрузка изображений - код асинхронный, поэтому вы видите значение счётчика еще до того, как изображения были загружены (или произошла ошибка)
let counter = 0;
function preloadImages(sources) {
for (const source of sources) {
let img = document.createElement('img');
img.onerror = img.onload = () => {
counter++;
}
img.src = source;
}
}
let sources = [
"https://en.js.cx/images-load/1.jpg",
"https://en.js.cx/images-load/2.jpg",
"https://en.js.cx/images-load/3.jpg"
];
preloadImages(sources);
console.log("счётчик сразу после завершения выполнения функции:", counter);
setTimeout(() => console.log("счетчик по таймеру:", counter), 1000);
async function preloadImages(links) {
let counter = 0;
async function createImage(link) {
const img = document.createElement('img');
img.src = link;
return new Promise((resolve, reject) => {
img.onload = () => {
document.body.appendChild(img);
resolve();
};
img.onerror = (e) => reject(e);
});
}
for (const link of links) {
try {
await createImage(link);
counter++;
console.log(counter, link);
} catch (e) {
console.log('Ошибка загрузки изображения - ', link);
}
}
return counter;
}
const links = [
"https://en.js.cx/images-load/1.jpg",
"https://en.js.cx/images-load/2.jpg 123",
"https://en.js.cx/images-load/3.jpg"
];
preloadImages(links).then(count => {
console.log('Изображений загружено: %s/%s', count, links.length);
});
Как развивать веб-проекты в 2026 году: технологии, контент E-E-A-T и факторы доверия
Современные инструменты для криптотрейдинга: как технологии помогают принимать решения
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники