用于循环的 Javascript 过早结束

Javascript for loop ending prematurely

本文关键字:结束 Javascript 循环 用于      更新时间:2023-09-26

我正在 dojo 中编写一个应用程序,并尝试执行以下代码:

/*for (i = 0; i < mainProperties.calendar.store.data.length; i++) {
    console.log("render loop " + i);
    mainProperties.calendar.store.put(mainProperties.calendar.store.data[i]);
    console.log(mainProperties.calendar.store.data.length);
}*/
mainProperties.calendar.store.put(mainProperties.calendar.store.data[0]);
mainProperties.calendar.store.put(mainProperties.calendar.store.data[1]);

mainProperties.calendar.store.data 只是一个包含 json 元素的数组。for 循环正确运行第一个元素,将"渲染循环 0"和"2"分别记录到控制台。但是,for 循环随后结束而不执行第二次。

我运行了底部的两行代码,以确保元素本身没有问题,并且两者都正确执行。有人有什么建议吗?

顺便说一句,我正在使用这段代码在从数据库中提取元素后重新触发渲染器。这是 DojoX 日历小部件的修改版本。

(将其移至评论中的答案)。

如果不看到更多代码,很难说,但我怀疑这是一个范围界定问题。循环中的某些东西可能正在设置 i 的值,这导致您的循环提前保释。

您需要确保做的是在将使用它们的函数中声明变量。取而代之的是:

for (i = 0; i < mainProperties.calendar.store.data.length; i++) {
    console.log("render loop " + i);
    mainProperties.calendar.store.put(mainProperties.calendar.store.data[i]);
    console.log(mainProperties.calendar.store.data.length);
}

这样做:

var i; // <- declare here
for (i = 0; i < mainProperties.calendar.store.data.length; i++) {
    console.log("render loop " + i);
    mainProperties.calendar.store.put(mainProperties.calendar.store.data[i]);
    console.log(mainProperties.calendar.store.data.length);
}

您还需要确保在该循环中调用的任何代码都使用变量i具有该变量自己的声明。

有关 JavaScript 范围划分的良好答案,请参阅此问题