我正在创建这样的函数数组。数组中的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/

10-09 20:02
查看更多