0

可能重复:
循环内的 Javascript 闭包 - 简单的实际示例

我似乎很难理解 javascript 中变量的范围。

我有以下代码:

for (var i =2; i< 5;i++){
    var k = (i+1).toString()
    window['graph.point'+i].onMove = function(x,y){
        return [min(x,window['graph.point'+k].coord[0]],f(min(x,window['graph.point'+k].coord[0]))]}
    }
}

这段代码应该对我在图表上的一些可移动点的可能位置施加一些限制。问题似乎是,当 graph.point 对象检查是否满足约束时,它们使用 k 的最后一个值,即 6。我如何确保这些对象使用它们应该使用的 k 值?

4

1 回答 1

2

for块没有自己的变量范围,因此您需要使用立即函数创建一个新范围:

for (var i =2; i< 5;i++){
    var k = (i+1).toString();
    (function(k, i) {
        window['graph.point'+i].onMove = function(x,y){
            return [min(x,window['graph.point'+k].coord[0]],f(min(x,window['graph.point'+k].coord[0]))]}
        }
    })(k, i);
}
于 2012-08-17T02:25:52.940 回答