我試圖給出for循環參數給內層閉包,因爲我想識別解碼後的音頻(放入緩衝區)。將閉環參數傳遞給閉包內的閉包
此代碼給出錯誤:e未定義。它工作,但是當刪除)(測試),我的意思是測試等於所有結果list.length然而我希望他們有調用當前參數我的值。
for (var i = 0; i < list.length; i++) { //load in every url
requestArray.push(new XMLHttpRequest());
requestArray[i].open('GET', list[i].url, true);
requestArray[i].responseType = 'arraybuffer';
test = i;
requestArray[i].onload = (function (e) {
//Async method: ASK J
context.decodeAudioData(e.target.response, (function (buffer) { //Async method
console.log(test);
if (!buffer) {
alert('error decoding file data: ');
return;
}
})(test),
function (e) {
console.log('Error decoding audio file', e)
});
})(test);
requestArray[i].onerror = function() {
alert('BufferLoader: XHR error');
}
requestArray[i].send();
}
其中是來自onload的「context」。我很驚訝,不會拋出一個錯誤 – SReject
上下文是在腳本的開始處定義的:它是webaudio的東西,但它與此問題無關:var context = new webkitAudioContext(); – Thomas