JS之经典for循环闭包问题解决⽅法
Title 像这样⼀个代码⽚段,初学者会理所当然地认为依次点击Li会弹出相应的0、1、2、3、4 但实际结果是每次都是4
原因是:每次点击输出i的时候,函数内部没有i,就从外部函数查找,⽽外部函数的值是每⼀次循环后的值4,所以每次点击输出的都是4解决办法⼀:加⼀层闭包,i 以函数参数形式传递给内层函数:
(function (i){
liList[i].onclick=function( ){ alert('当前点击第'+ i+'个'); } })(i)
解决办法⼆:找个属性将i值保存起来,然后弹出这个值
liList[i].number=i;
liList[i].onclick=function(){ alert(this.number) }