你运行一下代码会发现,无论你点击哪个列表,控制台都是输出10.这是因为var声明的变量是函数作用域的,而不是块级作用域的.也就是说,for循环10次,每次都是改变同一个i,所以它的值会从0一直加到10.还有个问题是闭包导致的,闭包保存的是外部变量的引用,而不是值.也就是说,循环10次监听器创建了10 个闭包,它们里面的i引用的是同一个啊.所以全部都指向了10. 要解决这个问题有两种方法.一种是使用ES6的let来替代 var i = 0 里面的var, 因为let支持块级作用域.改成如下就正常了…