有JSON
{"data":[{"id_brand":"1","name":"BMW"},{"id_brand":"4","name":"Hyundai"}]}
有个建表的功能
`
jsonToTable(json) {
this.Array = [];
this.tableElement.innerHTML="";
var tblHead = document.createElement("thead");
var tblTr = document.createElement("tr");
this.tableElement.appendChild(tblHead);
tblHead.appendChild(tblTr);
for (var key in json[0]) {
var tblTh = document.createElement("th");
tblTh.innerHTML = key;
tblTr.appendChild(tblTh);
}
var tblBody = document.createElement("tbody");
table.appendChild(tblBody);
for (var i = 0; i < json.length; i++) {
var tblTr = document.createElement("tr");
for (var key in json[i]) {
this.Array[this.Array.length] = document.createElement("td");
this.Array[this.Array.length-1].innerHTML = json[i][key];
var t = this.Array.length;
//Здесь проблема
this.Array[this.Array.length-1].addEventListener("click",function () {
console.log(key);
},true);
tblTr.appendChild(this.Array[this.Array.length-1]);
}
tblBody.appendChild(tblTr);
}
console.log(this.Array);
}
`
所以当你点击id_brand这一列时,就会触发addEventListener中的函数
控制台日志(密钥);
并显示“名称”,尽管它应该是 id_brand。我知道这是由于在循环执行过程中密钥发生了变化。如何解决? 类中的 PS 函数。

执行点击处理程序时,变量
key具有循环最后一次迭代的值 - 如您所见。通过返回处理函数的函数调用,该变量的值被“捕获”为参数,并且围绕返回的处理函数创建的闭包aKey从循环的特定迭代中看到正确的值。