for Javascript中的循环会产生误导性结果

时间:2016-10-29 19:58:55

标签: javascript for-loop javascript-events

我是Javascript的初学者,我很难理解它的一些功能。我无法弄清楚For循环在我的代码中的表现如何:

我有两个HTML段落,我想附加一个click侦听器,使用For循环将其颜色更改为红色。

var paragraphs = document.querySelectorAll('p')

for (var i = 0; i < paragraphs.length; i++) {
  p = paragraphs[i]
  p.addEventListener('click', function(e) {
    p.classList.toggle('red')
  })
}

此处,当我点击其中任何一段时,只有最后一段变为红色。

有人给了我一个我根本不懂的解决方案:

var paragraphs = document.querySelectorAll('p')

for (var i = 0; i < paragraphs.length; i++) {
  (function(p) {
    p.addEventListener('click', function(e) {
      p.classList.toggle('red')
    })
  })(paragraphs[i])
}

这是有效的,但我不知道这段代码中发生了什么。

有人可以通过告诉我为什么我的第一个代码不起作用(即使看起来是正确的)来帮助我,并解释一下第二个代码中发生了什么。谢谢!

0 个答案:

没有答案