首页 新闻 会员 周边 捐助

定时器在for循环中如何使用??

0
悬赏园豆:50 [已解决问题] 解决于 2024-05-31 18:07

新手小白程序员哭死,已经试了N多种方法不知道怎么改,在线求助各位大佬!

这个定时器写在这里就会报一个这个错误

Sugar-t的主页 Sugar-t | 初学一级 | 园豆:6
提问于:2024-05-31 16:27
< >
分享
最佳答案
0

不要用var 会有作用域问题。使用let i = 0

收获园豆:30
陈大仙zs | 菜鸟二级 |园豆:232 | 2024-05-31 16:34
其他回答(2)
0

cannot read property of undefined,无法读取未定义的属性
循环的 i 对象里没有 j.编号,所以会报错,跟定时器没太大关系

我超凶的 | 园豆:204 (菜鸟二级) | 2024-05-31 16:42
0

可以看下data[i]的值是不是等于undefine,排除下这个情况

收获园豆:20
书昀 | 园豆:1072 (小虾三级) | 2024-05-31 17:15

不是的,没写这个定时器是有数据的

支持(0) 反对(0) Sugar-t | 园豆:6 (初学一级) | 2024-05-31 17:19

@Sugar-t: var会将生声明提升并且每次执行setInterval时候在setInterval中使用的i都会是i的最终值也就是3所以会报错,如果使用let则循环调用setInterval后setInterval里面的1就是当时循环的值不会出现越界后终止循环的值

let data = [{j_编号: 123}, {j_编号: 222}, {j_编号: 333}]
let dada1 = [{j_编号: 123}, {j_编号: 222}, {j_编号: 333}]
for(var i = 0; i < dada1.length; i++) {
console.log('i',i)
console.log("dada1.length", dada1.length)
setInterval( ()=> {
// console.log(i, '>>>>>>>>>>>>>>>>>>>>>>>', dada1[i].j_编号)
console.log(i, '>>>>>>>>>>>最终值')
}, 1000)
}

拿这段代码测试,就明白了

支持(0) 反对(0) 书昀 | 园豆:1072 (小虾三级) | 2024-05-31 18:03
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册