[问题] setTimeout与循环的问题

楼主: iamshuichi (vincent)   2016-11-24 00:15:18
audioPlay=[audio1.play(), audio2.play(), audio3.play();
time=[0, 500, 1000];
for (var i=0; i<3; i++) {
setTimeout("audioPlay[i]", time[i]);
}
上面这段程式,我希望audio1播完之后
等待500毫秒之后播audio2
再等待500毫秒后播audio3
但是失败了,我猜循环大概不能这样写吧!
于是我修改了一下
for (var i=0; i<3; i++) {
setTimeout("audioPlay[i]", 500);
}
结果还是不行,三个声音同时出来
看来JavaScript是先等500毫秒
再同时执行前面的三个函数
如果想达到我的目的
不知道该怎么写呢?
作者: ninetyeight (98NINETYEIGHT)   2016-11-24 00:29:00
audioPlay=[audio1, audio2, audio3]setTimeout(function(){audioPlay[i].play()},time[i
作者: youtuuube000 (小孩)   2016-11-24 04:02:00
改成setTimeout(audioPlay[i], time[i]); 应该可行因为""里面是字串 因此i是字符 不会随着for的i改变
作者: TETZ (你今天宅了吗?)   2016-11-24 04:13:00
我记得setTimeout+for loop的话要用IIFE不然i都会是一样的https://goo.gl/kAXLdD应该说你第一个解法要搭配IIFE第二个的话可以在setTimeout里另外加两个setTimeout来跑?啊仔细一看前面的连结跟这题没什么关https://goo.gl/9YDyp1这个比较清楚因为当你执行setTimeout时那些i已经变成2了js的变量是跟着内存的address除非你另外assign一个变量去存
作者: xdraculax (首席怪叔叔)   2016-11-24 09:47:00
最早的错误是组成阵列时已播放,另外i 的问题可改 setTimeout(audoPlay[i].play, time[i])
楼主: iamshuichi (vincent)   2016-11-24 21:44:00
感谢几位大大的指导,我研究看看!

Links booklink

Contact Us: admin [ a t ] ucptt.com