Я занимался кодированием слайд-шоу в javascript с использованием jquery, когда столкнулся с чем-то, что делало то, что мои несколько строк кода делали в несколько строк.
Проблема в том, что я не понимаю, как это работает, поэтому я могу изменить его.
var imgs = [
'image1.jpg',
'image2.jpg',
'image3.jpg'];
var cnt = imgs.length;
$(function() {
setInterval(Slider, 4000);
});
function Slider() {
$('#imageSlide').fadeOut("slow", function() {
$(this).attr('src', imgs[(imgs.length++) % cnt]).fadeIn("slow");
});
}
Это строка, которая заставляет меня:
[(imgs.length++) % cnt]
Я читаю это как
3+1 % 3 = 1
Теперь каждый раз, когда он выполняется, кажется, что ни один из этого кода не модифицирует ни одну из переменных.
cnt
всегда будет равно imgs.length
(3), imgs.length++
на самом деле не изменяет его, он просто добавляет один для этого отдельного выполнения, правильно?
Поэтому независимо от того, сколько раз он выполняется, он всегда будет imgs[1]
, но когда я выполняю код, он правильно проходит через все объекты массива.
EDIT:
Я просто добавил alert(imgs.length);
и подтвердил, что ++
действительно меняет переменную, но для меня это все еще не имеет смысла.
Первый запуск, imgs.length = 4
после ++. 4 % 3 = 1
поэтому он должен запускать объект массива [1]
не [0]
?
Второй запуск, 5 % 3 = 2
Третий прогон, 6 % 3 = 0
и т. Д. И т. Д., Но он никогда не должен сбрасываться. Тем не менее, если я поставлю alert(imgs.length % cnt);
, он возвращает только 0, 1, 2, а не сбрасывает.
Почему?