我对javascript中的循环有以下问题 - for循环的目的很简单,它们意味着要听所有列的事件。使用FOR循环调用事件侦听器javascript
我有两种方法来实现这一点,我想知道为什么一个工作,但不是另一个。
不起作用第一种方法:
var column = document.querySelectorAll("td");
for (var i =0 ; i< column.length; i++)//column.length is 9
{
column[i].addEventListener("click",function(){
column[i].innerText = "X";
})
}
它打印出来,当事件触发以下错误:
遗漏的类型错误:无法在HTMLTableCellElement设置的不确定 财产“的innerText”。 (:6:21)
我用console.log(i)替换了“column [i] .innerText =”X“,我得到了9. 但是根据我的for循环条件,它应该在我达到8作为我的column.length是9,我使用我column.length,所以它应该停在8。
问题:为什么我可以得到9在这个循环?为什么我的第二种方法下面可以工作
,做第二种方法工作:
var column = document.querySelectorAll("td");
for (var i = 0 ; i < column.length; i++)
{
column[i] = clickAction(i);
}
function clickAction(param)
{
column[param].addEventListener("click",function(){
column[param].innerText = "X";
})
}
它的工作原理很好,如果我把这个动作放到一个函数外部。
感谢
请参阅https://stackoverflow.com/questions/1451009/javascript-infamous -loop-issue和https://stackoverflow.com/questions/750486/javascript-closure-inside-loops-simple-practical-example –
感谢您的回复。阅读您发布的链接后: 我发现以下链接可以帮助我轻松理解此问题。 http://conceptf1.blogspot.my/2013/11/javascript-closures.html – csamleong