内部函数无法访问的匿名函数参数

时间:2013-01-29 17:39:10

标签: javascript scope anonymous-function

我一直在尝试这样做

function test()
{
    $.getJSON("http://myurl.com",function (data){
        for( i=0; i<data.length; i++){
            test = createElement('img');
            test.onclick = function (){ myotherfun(data[i]); }
        }
    }
}

function myotherfun(data)
{
    alert(data);
}

错误消息指出范围未涵盖data

有人可以解释为什么会这样吗?

1 个答案:

答案 0 :(得分:1)

现在您已经编辑了问题,我可以看到问题XD

问题是onclick函数将使用data和(更重要的)i的当前值。所以基本上它正在寻找data[data.length]length的定义不存在。

相反,您需要“锁定”迭代器的值。这是你如何做到的:

for(i=0; i<data.length; i++) {
  (function(i) {
    // do stuff that relies on i
  })(i);
}