JavaScript 中变量范围的问题

Issue with scope of variables in javascript

本文关键字:问题 范围 变量 JavaScript      更新时间:2023-09-26

可能的重复项:
循环内的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 值?

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