当我遇到一些正在做我的几行代码在几行中所做的事情时,我正在使用jquery用javascript编写幻灯片演示。
问题是,我不了解它的工作原理,因此可以对其进行修改。
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]
,但是当我执行代码时,它可以在所有数组对象中正常运行。编辑:
我只是添加了
alert(imgs.length);
并确认++
确实确实更改了变量,但是对我来说仍然没有意义。第一次运行,在++之后运行
imgs.length = 4
。 4 % 3 = 1
,所以它应该运行数组对象[1]
而不是[0]
?第二次运行,
5 % 3 = 2
第三轮,
6 % 3 = 0
等等等等。但永远不要重置。但是,如果我放一个
alert(imgs.length % cnt);
,它只会返回0、1、2,而不是重置值。为什么?
最佳答案
imgs.length++
的返回值为3,因此3%3 = 0,但是imgs.length
将为4
,并且imgs
数组将包含4
个项目。
在控制台中尝试:
var x = [ 1, 2, 3 ]
x.length++
=> 3
x.length++
=> 4
x.length++
=> 5
x
[1, 2, 3, undefined, undefined, undefined]
因此,每次调用
imgs.length++
时,itt都会将一项附加到数组中。所以不是一个很好的代码,但简短:)编辑:为什么很容易回答,在开始时它包含
cnt
个元素,因此代码将踩在每个图像上,并从图像的开头开始。因此,如果imgs
数组包含5
个项目,它将逐步遍历5
个项目并从头开始。这段代码的唯一问题是,每次都会增加数组,浏览器会占用内存。
关于jquery - jQuery幻灯片放映-为什么此代码有效?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2094184/