use*_*693 7 javascript loops settimeout
以下 JavaScript 应该(在我看来)播放间隔 0.5 秒的音符序列。但它把它们全部作为一个单一的同时和弦播放。知道如何修复它吗?
function playRecording() {
if (notes.length > 0) {
for (var i = 0; i < notes.length; i++) {
var timeToStartNote = 500 * i;
setTimeout(playNote(i), timeToStartNote);
}
}
}
function playNote(i) {
var noteNumber = notes[i];
var note = new Audio("/notes/note_" + noteNumber + ".mp3");
note.play();
}
Run Code Online (Sandbox Code Playgroud)
JavaScript 闭包,将其包装在一个自执行函数中:
for (var i = 0; i < notes.length; i++) {
(function(i) {
var timeToStartNote = 500 * i;
setTimeout(function() {
playNote(i)
}, timeToStartNote);
})(i)
}
Run Code Online (Sandbox Code Playgroud)
谢谢各位,这是我问题的完整解决方案:
function playRecording() {
if (notes.length > 0) {
for (var i = 0; i < notes.length; i++) {
playNote(i);
}
}
}
function playNote(i) {
setTimeout(function () {
var noteNumber = notes[i];
var note = new Audio("/notes/note_" + noteNumber + ".mp3");
note.play();
}, 500 * i);
}
Run Code Online (Sandbox Code Playgroud)