[問題] 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