li添加点击事件 为什么点击输出i值总为li的长度 它是先给每个li绑定了点击事件 此时li已经到li的长度 所以后面点击输出的i是li的长度 ? 疑惑满满 求解
var申明的这个i变量在这个script块中是全局变量,所以函数内部得到的是i最后for循环后的值,需要做闭包。
要么var改let,let是块级别变量,只在对应的代码块中能访问,自动形成es5的闭包效果。
这个很正常呀,因为你点击的时候 i 是循环的最后一个值,所以,不能使用这个方法
如果你要使用这个i 只可以这么处理
lis[i].index = i;
lis[i].onclick=function(){
alert(this.index)
}
试试
盲猜浏览器点击事件是异步任务,所以for循环时候将点击事件加入任务队列,等待执行,优先执行同步任务,i自增。当for循环结束后,再去执行点击事件,此时i已经经过for循环改变了。
将var换成let,块级作用域可以实现预期效果
可以把var改成let