JavaScript 带数组的 SetInterval() 函数

JavaScript SetInterval() function with arrays

let k = 0;
function change() {
    let doc = document.body;
    let color = ["black", "blue", "brown", "green"];
    doc.style.backgroundColor = color[k];
    k++;
    if (k == color.length) {
        k = 0;
    }
}
setInterval(change, 1000);

**我写**

function change2() {
 let doc = document.body;
 let color = ["black", "blue", "brown", "green"];
 for (let r=0; r<color.length; r++){
     doc.style.backgroundColor = color[r];
 }
}
setInterval(change2, 1000);

第一个功能有效,但第二个功能无效。我不明白这个逻辑。请解释一下,基本逻辑。 请注意--我是新人JavaScript!

用r改变k

function change2() {
    let doc = document.body;
    let color = ["black", "blue", "brown", "green"];
    for (let r=0; r<color.length; r++){
        doc.style.backgroundColor = color[r];
    }
}
setInterval(change2, 1000);

您想一次切换一个背景颜色,但 change2 函数从不递增 k,因此它只会将背景更改为第一种颜色。此外,循环是不必要的,因为您只想每秒更改一次颜色。

即使您将其更改为使用 k 作为循环变量,当您应该切换到下一个颜色时,您也在所有颜色之间切换。

是因为r和k的范围。 在您的第一个示例中,您在函数更改之外声明了 k,并且 re-assigning every-time 您的更改函数被调用并在特定条件下将其重置。 在第二个示例中,声明了 r 并且 re-assigned 都在同一个函数调用中。

因此,显然在第二个示例中 body 颜色非常非常快地从黑色变为绿色,并且每秒都在发生。