当我遇到一些正在做我的几行代码在几行中所做的事情时,我正在使用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 = 44 % 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/

10-11 20:36