Javascript 在循环中创建Onchange函数

Javascript 在循环中创建Onchange函数,javascript,Javascript,我在for循环中创建动态输入。每个输入都有自己的onchange函数,用于检查其值是否大于数组值。在每个onchange函数中,arrId变量总是6,它是数组中的最后一个元素 有没有可能使它正确?如果假设我更改第一个输入,arrId应该是数组中的第一个元素,而不是最后一个元素。但是arrId始终是数组中的最后一个元素 var arr=[“22”、“12”、“15”、“6”]; 对于(变量i=0;iparseInt(arrId)){ x、 target.value=arrId; } } docu

我在for循环中创建动态输入。每个输入都有自己的
onchange
函数,用于检查其值是否大于数组值。在每个
onchange
函数中,
arrId
变量总是
6
,它是数组中的最后一个元素

有没有可能使它正确?如果假设我更改第一个输入,
arrId
应该是数组中的第一个元素,而不是最后一个元素。但是
arrId
始终是数组中的最后一个元素

var arr=[“22”、“12”、“15”、“6”];
对于(变量i=0;iparseInt(arrId)){
x、 target.value=arrId;
}
}
document.getElementById(“输入”).appendChild(输入);
}
输入{
显示:块;
利润率:10px0;
}

它总是显示i的最后一个值,因为6是最后一个值,所以您在更改时调用的函数将只记住其作用域中的最后一个值,为了解决它,您需要创建一个新的作用域,以便该函数记住您可以使用的当前值

var arr=[“22”、“12”、“15”、“6”];
对于(变量i=0;iparseInt(arrId)){
x、 target.value=arrId;
}
}
})(arrId,输入);
document.getElementById(“输入”).appendChild(输入);
}
输入{
显示:块;
利润率:10px0;
}

要点:JavaScript没有块作用域。块中引入的变量的作用域是包含函数或脚本的,设置这些变量的效果将持续到块本身之外。换句话说,block语句不引入作用域。尽管“独立”块是有效的语法,但您不希望在JavaScript中使用独立块,因为如果您认为它们做的事情与C或Java中的类似,它们不会做您认为它们做的事情

var arr=[“22”、“12”、“15”、“6”];
var输入=document.createElement(“输入”);
input.value=0;
input.type=“number”;
对于(变量i=0;iparseInt(arrId)){
x、 target.value=arrId;
}
})(arr[i],输入)
}
document.getElementById(“输入”).appendChild(输入);
}

var arrId=arr[i]
to
let arrId=arr[i]
让arrId=arr[i]我不能使用
let
。它说当前的JavaScript版本不支持
Let定义。
我从5.1切换到了6。谢谢你的评论<代码>让
解决这个问题。但在这种情况下,我为什么要使用let?
var arr = ["22", "12", "15", "6"];

var input = document.createElement("input");
input.value = 0;
 input.type = "number";

for (var i = 0; i < arr.length; i++) {
(function(val){
  var arrId = val;

    var input = document.createElement("input");
    input.value = 0;
    input.type = "number";
    input.onchange = function(x) {

      console.log(x.target.value + " " + arrId);

      if (parseInt(x.target.value) > parseInt(arrId)) {

        x.target.value = arrId;
      }

})(arr[i],input)
}

document.getElementById("inputs").appendChild(input);

}