let声明实现循环中的事件可拿到每个计数器的值asdsa

本文探讨了在JavaScript循环中如何利用let关键字确保每次迭代都能捕获正确的计数器值,避免var声明导致的闭包问题。
摘要由CSDN通过智能技术生成

let 和 var


		// 循环中绑定事件,在事件内使用循环每次的计数器
		    var ali = document.querySelectorAll(".list li");
			for(var i=0;i<ali.length;i++){
			        ali[i].onclick = function(){
			            console.log(i);	//6
			        }
			}
			
			// 循环执行时没有变量去保存i的值,点击事件也没执行,var声明的变量在全局范围内有效
			// i的值会随着循环的i++被一次次覆盖
			// 拿不到所有的i,i会被覆盖直到循环结束此时i为6
			
			// 相当于
			// var i=0;全局的i    点击时循环已经结束 i是全局的每次i++后,i的值会改变
			
			{
			        ali[i].onclick = function(){
			            console.log(i);	//6
			        }
					i++;
			}
		
		// 解决方法	
		// 方法一
			// let触发了块级作用域,实现了作用域的嵌套
			for(let i=0;i<ali.length;i++){
				// let i=0;
			    ali[i].onclick = function(){
			        console.log(i);
			    }
			}
			// i是let声明的,当前的i只在本轮循环内有效本轮循环结束这个i就无效了再循环会重新声明,但是js内部会
			// 暂时记录每轮循环这个i的值,在下一轮循环重新声明i时就是在
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值