Javascript循环;获取当前变量

时间:2011-02-24 19:58:42

标签: javascript variables loops closures

我正在尝试使用shiftzoom.js

制作地图

我有以下代码段:

function selectall() {
    for (i in geodata['world']) {
        var q = getGeoPosition('world', i.toUpperCase(), 1654, 496, 1350, 407);
        shiftzoom.construct($('world'), [{
            x: q.l,
            y: q.t,
            w: 40,
            h: 40,
            id: geodata['world'][i].lc,
            pos: 0,
            title: '',
            href: "javascript:get_lake(i); ",
            target: 'graphFrame',
            src: 'images/bullet.gif'
        }]);
        cvi_tip.add(cvi_tip.$(geodata['world'][i].lc), '<small>Province:</small><br/><big><b><u>' + geodata['world'][i].ln + '</u></b></big><br/><small>LAT/LONG:</small><br/><big><b>' + geodata['world'][i].coord + '</b></big><br/><small>PROVINCE:</small><br/><big><b><i>' + geodata['world'][i].pr + '</i></b></big>');
    }
}

我正在定位点以表示地图上的湖泊,我希望它在点击点时放大。这就是函数get_lake所做的,但是我点击的每个点都会显示放大到“i”的最后一个值。我尝试过使用像这样的闭包:

 href:"javascript:function(num){return function(){get_lake(num);};}(i);"

但我可能没有正确使用它,因为此代码无法运行。有谁知道如何编码它,以便函数调用当前变量而不是最后一个?

由于

2 个答案:

答案 0 :(得分:2)

老实说,我对你正在使用的库不熟悉,我发现你发布的代码绝对是MESS!缩进将有助于提高可读性。无论如何,试试这个:

href:"javascript:get_lake("+i+"); ",

闭包在这里不起作用,因为你没有在那里创建一个函数:你正在创建一个字符串。因此,将i的值连接到字符串中。

答案 1 :(得分:0)

我不清楚你的代码要改变什么,但这个答案可能会有所帮助:

JavaScript closure inside loops – simple practical example