我正在创建这样的函数数组。数组中的url是正确的,但是当我最终遍历arraylist中的此信息时……。x [1]的funt引用了存储在url中的最后一个值,而x [0]是正确的。有没有一种方法可以调整内部网址以匹配x [0]的内部网址?我当时正在考虑为匿名功能添加一个参数,但是我不确定这是否会起作用。我也不确定我是否可以自己处理数据树,就像function.parent [0]引用函数的父级并调用元素0一样。我想最后一个想法是以DOM逻辑方式进行思考的。
var newArray = new Array();
for(var i=0;i<fileUrls.length;++i) {
var url = fileUrls[i];
var x = [];//new Array();
x = [url,
function(){
displayFile(url, 'image', null, ft_id, null, null, null, null, !MA.isiOS());
},
function(e){
if(DEBUG) console.log('Error creating gallery thumbnail');
alert('There was a problem creating a thumbnail');
MA.hideMessage();
}
];
newArray.push(x);
}
pollingThrottler(2,newArray, function(a,b,c){
//alert(a+"\n-----\n"+b+"\n-----\n"+c);
//alert(bentleyPlugins.createThumbnailForPath(a,b,c));
//alert(a);
//a does not reference the correct item.
createThumbnailForPath(a,b,c);
return;
},function(){
alert("success!");
});
是实际的代码。
最佳答案
您需要一个用于数组元素的生成器函数,如下所示:
function genElement( url ) {
return [url,
function(){
displayFile(url, 'image', null, ft_id, null, null, null, null, !MA.isiOS());
},
function(e){
if(DEBUG) console.log('Error creating gallery thumbnail');
alert('There was a problem creating a thumbnail');
MA.hideMessage();
}
];
}
arrayList.push( genElement( myUrl ) );
基本上在代码中发生的是,所有功能元素都将引用相同的
url
变量,该变量在循环过程中会更改其值。使用生成器函数时,调用生成器函数时将生成url的副本。这导致每个元素都有其“自己的” URL变量以供参考。
编辑
为了便于阅读代码和提高性能,我建议使用@dystroy的答案,因为我认为这样做是更好的方法。
关于javascript - 内部函数没有正确的引用。我知道为什么,但我不知道JS对其进行返工,因此它可以正常工作,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12641087/