浅谈js for循环输出i为同一值的问题

2020-12-24 10:30

阅读:580

YPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd">

标签:变量   body   函数   head   注意   而不是   演示   异步   strong   

问题再现

? 最近开发中遇到一个问题,为什么每次输出都是5,而不是点击每个p,就alert出对应的1,2,3,4,5。


闭包演示

1

2

3

4

5

此时点击任意p弹出的都是5

出现原因:js事件处理器在线程空闲时间不会运行,导致最后运行的时候输出的都是i最后的值,即:5


解决办法:使用闭包将变量i的值保护起来

//sava1:加一层闭包,i以函数参数形式传递给内层函数 
for( var i=0; i

总结

在ECMAScript5和6中,var和let的作用域是不同的:var的作用域在函数上,let的作用域在块上,因此当有异步函数发生调用的时候,之前已经绑定好的点击事件会寻找在onload函数的i值,此时i值已经不是当初设定好的值,而是最后一次循环后的值,而使用let的话,那么在每次循环的时候就会在新的块上重新创建新的变量i,所以每次点击的i的值都会不同。

浅谈js for循环输出i为同一值的问题

标签:变量   body   函数   head   注意   而不是   演示   异步   strong   

原文地址:https://www.cnblogs.com/eden-libinglin/p/13947804.html


评论


亲,登录后才可以留言!