js中点击事件卫异步函数,js会先执行那些非异步函数,
也就是说,会先执行for循环,等for循环执行完毕后,才会增加js绑定的点击事件,此时 for循环已经结束 输出的i的值 永远是最后一个值.所以才会形成这样的结果.
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<style>
div{
width: 40px;
height: 40px;
background: blueviolet;
margin: 10px;
}
</style>
<body>
<div></div>
<div></div>
<div></div>
<script>
divList=document.querySelectorAll("div");
for(var i=0;i<divList.length;i++){
divList[i].onclick=function(){
alert("我是第"+i+"行")
}
}
</script>
</body>
</html>
执行上面的代码后,随便点击一个div 弹出的信息一定是我是第3行,
解决的办法如下
<script>
divList=document.querySelectorAll("div");
for(var i=0;i<divList.length;i++){
(function(i){
divList[i].onclick=function(){
alert("我是第"+i+"行")
}
})(i)
}
</script>
2
<script>
divList=document.querySelectorAll("div");
for(var i=0;i<divList.length;i++){
divList[i].index=i
divList[i].onclick=function(){
alert("我是第"+this.index+"行")
}
}
</script>
本文探讨了JavaScript中点击事件绑定的问题,特别是当使用for循环为多个DOM元素绑定相同的点击事件时,如何避免闭包导致的变量作用域问题。通过实例代码展示了不同解决方案,包括使用立即执行函数表达式(IIFE)和利用DOM属性存储索引。
1009

被折叠的 条评论
为什么被折叠?



