Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/461.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用setInterval和Loop播放音频_Javascript_Arrays_Loops_For Loop - Fatal编程技术网

Javascript 使用setInterval和Loop播放音频

Javascript 使用setInterval和Loop播放音频,javascript,arrays,loops,for-loop,Javascript,Arrays,Loops,For Loop,我有这个阵列: var song = ['note1.mp3', 'note2.mp3', 'note3.mp3', 'note4.mp3'] for(i = 0; i < song.length; i++) { setInterval(function() { //play song[i] //or console.log(song[i]); }, 1000); } var-song=['note1.mp3','note2.mp3','note3.mp3

我有这个阵列:

var song = ['note1.mp3', 'note2.mp3', 'note3.mp3', 'note4.mp3']

for(i = 0; i < song.length; i++) {
  setInterval(function() {

    //play song[i]
    //or console.log(song[i]);

  }, 1000);

}
var-song=['note1.mp3','note2.mp3','note3.mp3','note4.mp3']
对于(i=0;i
但这行不通,有人知道为什么吗?我想先播放note1.mp3,然后播放note2、note3和note4


谢谢

根据你的评论,你得到的行为是你总是得到最后一首歌。 这是因为间隔函数在循环计数器
i
上关闭,因此它使用调用间隔函数时
i
的值,该值始终是最后一个值

通常,您不应该在这样的循环中设置回调。相反,你可以这样做

var song = ['note1.mp3', 'note2.mp3', 'note3.mp3', 'note4.mp3']
var makeCallback = function(index) { 
    return function() {
        console.log(index);
    }
}

for(i = 0; i < song.length; i++) {
  setInterval(makeCallback(i), 1000);            
}
var-song=['note1.mp3','note2.mp3','note3.mp3','note4.mp3']
var makeCallback=函数(索引){
返回函数(){
控制台日志(索引);
}
}
对于(i=0;i

因此,为每个迭代生成不同的闭包

您就有了范围问题。所有回调都有一个
i
,您必须为每个
i
创建一个作用域。您还必须区分回调


你期望什么,你有什么<代码>不工作
不是很有用。我希望第一秒是1,第二秒之后是2,以此类推。
var song = ['a', 'b', 'c', 'd', 'e'];

$.each(song, function (i) {
    setTimeout(function () {
        $("div").text(song[i]);
    }, i * 1000);
});