正在回答 回答被采纳积分+1
1回答
好帮手慕慕子
2022-04-06 17:27:45
同学你好,猜测提到的可能是下面这种情况,示例:
<!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>
<body>
<ul>
<li>1</li>
<li>2</li>
<li>3</li>
<li>4</li>
<li>5</li>
</ul>
<script>
var lis = document.getElementsByTagName('li')
for (var i = 0; i < lis.length; i++) {
lis[i].onclick = function () {
console.log(i)
}
}
</script>
</body>
</html>点击按钮时,输出对应的索引值,但是上面代码中,不管点击哪个按钮,最终输出结果都是5。

原因:i是全局变量,for循环结束后值为5,点击按钮触发事件函数时,会沿着作用域链向外查找,找到全局作用域中的i,所以最终输出结果都是5
解决:利用闭包一个很重要的作用就是设置私有变量,结合匿名自执行函数,传入i值,这样每次循环时,都会形成一个函数作用域,用来保存当前的i值,那么点击按钮时,就可以沿着作用域链找到匿名自执行函数中的i值并输出。示例:


祝学习愉快~
相似问题
登录后可查看更多问答,登录/注册
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星