Possible Duplicate:
Javascript closure inside loops - simple practical example




我似乎在努力理解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值?

最佳答案

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);
}

07-24 09:50
查看更多