如何确保在此循环中维护变量范围

时间:2012-08-29 02:29:31

标签: javascript javascript-events scope

  

可能重复:
  Javascript closure inside loops - simple practical example

我有一个image.onload调用的循环,如下所示:

for (var i = 0; i < array.length; i++){
  var item = array[i]
    , image = new Image();

  image.onload = function(){
    // do something with 'item'
  }
  image.src = url;
}

因为我不知道何时触发onload函数,我相信item被覆盖了。如何确保使用onload变量触发每个item函数,引用它在函数绑定到onload事件时所执行的数据?

2 个答案:

答案 0 :(得分:0)

这应该有用。

image.onload = function(item){
    return function(){
      // do something with 'item'
    }(item);
};

你想要做的是创建“范围”,以便在调用事件函数时,closure带来你想要的值。

答案 1 :(得分:0)

使用IIFE返回使用当前项目的函数

  image.onload = (function(param){
    return function(){
    //do something with 'param'
    }
  })(item);