javascript 碰到的一个 循环的问题

Posted wxhhts

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了javascript 碰到的一个 循环的问题相关的知识,希望对你有一定的参考价值。

最近碰到一个问题,关于javascript 循环,真是让我对这门语言更加的好奇(好气)了,话不多说,直接上代码:

<body>
<p>1</p>
<p>2</p>
<p>3</p>
<p>4</p>
<p>5</p>
<script type="text/javascript">


window.onload=function(){


var p=document.getElementsByTagName("p");


for(var i=0;i<p.length;i++){


p[i].onclick=function(){


alert(i);
}
}
}
</script>
</body>这是一个点击事件,我开始的想法是点击上面的p ,触发点击事件,弹出 i 值,但是结果每次都弹出5.

 

后来查询之后才得知:js事件处理器在线程空闲时间不会运行,导致最后运行的时候输出的都是i最后的值。

也就是说,这个事件在没有点击时是不会跟着循环运行的,而外部循环依旧是进行的,这就造成一开始代码运行循环结束,然后事件点击只能得到最后的值。

那么为了防止这样的情况,我尝试了在后面增加“()”使其变成自运行函数进行测试,发现终于可以正常弹值,可是这也不我想要的。因为我还是想要点击弹值,而不是加载

后自动弹值。

 

之后经过改正,想到,既然是事件没有跟着循环运行得到值,为何不直接将“ i ”的值直接分配给P[ i ]?

于是:

window.onload=function(){


var p=document.getElementsByTagName("p");


for(var i=0;i<p.length;i++){


p[i].i=i;  //在这里将i 保存起来


p[i].onclick=function(){


alert(this.i);


}
}
}

  结果运行正常。

这里我用了this ,关于this这个知识点对于我这个小萌新来说真的是有很大难度,

下一篇更新的博文我打算写它,彻底把它搞清楚才行。

 

以上是关于javascript 碰到的一个 循环的问题的主要内容,如果未能解决你的问题,请参考以下文章

碰到一个ant design跨域问题

在网页中打印一个99乘法表--JavaScript描述

深入理解JavaScript的闭包特性 如何给循环中的对象添加事件

深入理解JavaScript的闭包特性如何给循环中的对象添加事件

E4A碰到打开自动闪退又自动打开又闪退一直循环的问题

在其他函数或循环中构造 lambda 时是不是存在性能问题?