gpt4 book ai didi

javascript - 将循环参数传递给闭包内的闭包

转载 作者:行者123 更新时间:2023-11-29 17:20:24 25 4
gpt4 key购买 nike

我试图将 for 循环参数 i 提供给内部闭包,因为我想识别我的解码音频(放在缓冲区内)。

此代码给出错误:e 未定义。但是,它在删除 )(test) 时起作用,我的意思是 test 等于所有结果的 list.length 但是我希望它们在调用时具有当前参数 i 的值。

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();
}

最佳答案

for (var i=0; i<list.length; i++){
requestArray.push(new XMLHttpRequest());
requestArray[i].open('GET', list[i].url, true);
requestArray[i].responseType = 'arraybuffer';
requestArray[i].onload = (function (i) {
return function (resp) {
// i: index in requestArray
// resp: the response object passed when the onload event occurs

context.decodeAudioData(
resp.target.response,
(function(test) {
return function (buffer) {
console.log(test);
if (!buffer) {
alert('error decoding file data: ');
return;
}
}
}(i)),
function(e) { console.log('Error decoding audio file', e)}
);
}
}(i));
requestArray[i].onerror = function() {
alert('BufferLoader: XHR error');
}
requestArray[i].send();
}



请注意,对于要创建的闭包,函数必须返回一个函数。

这是一个闭包:

(function(){
var a = "b";
return function(){ alert(b); }
}());


这会在看到时尽快进行评估:

(function(){
var a = "b";
}());

关于javascript - 将循环参数传递给闭包内的闭包,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13363599/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com