Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 函数似乎访问变量的最后一个引用,而不是将其存储在函数调用中_Javascript_Jquery - Fatal编程技术网

Javascript 函数似乎访问变量的最后一个引用,而不是将其存储在函数调用中

Javascript 函数似乎访问变量的最后一个引用,而不是将其存储在函数调用中,javascript,jquery,Javascript,Jquery,我本打算写一篇冗长而复杂的文章,但我想采用直接的方法 我有一个循环,它创建了一个元素数组,其中变量Url。该数组如下所示: x = [url,function(){...},function(){...}]; 然后进入arrayList: arrayList = [x1,x2,x3,x4,x5]; 我认为到目前为止这是有道理的。它存储在arrayList对象、1个变量和2个函数中 这是踢球的人 当我遍历arrayList时,url都是相同的,这是创建arrayList的forloop中对

我本打算写一篇冗长而复杂的文章,但我想采用直接的方法

我有一个循环,它创建了一个元素数组,其中变量Url。该数组如下所示:

 x = [url,function(){...},function(){...}];
然后进入arrayList:

 arrayList = [x1,x2,x3,x4,x5];
我认为到目前为止这是有道理的。它存储在arrayList对象、1个变量和2个函数中

这是踢球的人

当我遍历arrayList时,url都是相同的,这是创建arrayList的forloop中对url的最后一次引用

我试图解决这个问题,对变量执行.toString()操作,将其内容存储在数组中,而不是变量名本身。那没用:(

我该怎么解决这个问题呢?我很困惑:-(

编辑:我想显示循环的外观,因为其中一个答案是关于数组不准确地引用它的

Edit2:导致问题的url是下面显示文件中的内部url。看起来这些url都指向同一个引用,这是一个nono。我该如何更改这些url?是否必须将其作为参数传递?

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

对于(var i=0;i我认为你拥有的是:

arrayList = [x,x,x,x,x];
也就是说,一个数组包含对同一对象的多个引用。如果是这种情况,那么当您查看不同项目中的
url
属性时,您一直在查看同一属性,因为它是一个项目

这将是重用数组来填充
arrayList
数组的结果,例如:

var x = [];
var arrayList = [];
for (int i = 0; i < 5; i++) {
  x[0] = 'url ' + i;
  x[1] = function(){};
  x[2] = function(){};
  arrayList.push(x);
}

如果在循环中构造这些函数,并且函数内部引用“url”,则它们都引用同一个变量。使用“外部”变量的引用构造函数不会“冻结”变量的值。它仍然是“活动的”引用外部作用域中的变量。让我添加一个编辑,以便您了解更多我所做的事情……正如我相信我做了您要求的解决方案一样,这仍然是一个问题。我将发布循环我有URL是变量的正确URL,在我的顶部示例中。问题是数组第一个函数中的URL。在内部,它需要函数(){displayFile(URL,'image'…);}相同的url,但外部的不同。数组中的
url
值是否真的在所有项中都相同?调用
displayFile
中使用的
url
值将是函数关闭时捕获的局部变量,因此对于所有项都是相同的。[您在我键入时回答了这个问题。]要从每次迭代中获取特定值,您需要另一个闭包来捕获变量的值,而不是变量本身。请参见上面的编辑。
var arrayList = [];
for (int i = 0; i < 5; i++) {
  var x = [];
  x[0] = 'url ' + i;
  x[1] = function(){};
  x[2] = function(){};
  arrayList.push(x);
}
var newArray = new Array();
for(var i=0;i<fileUrls.length;++i) {
  var url = fileUrls[i];
  var x = [];//new Array();

  var f;
  (function(url){
    f = function(){
      displayFile(url, 'image', null, ft_id, null, null, null, null, !MA.isiOS());
    };
  })(url);

  x = [url, f , 
    function(e){
      if(DEBUG) console.log('Error creating gallery thumbnail');
      alert('There was a problem creating a thumbnail');
      MA.hideMessage();
    }
  ];
  newArray.push(x);
}