浅谈js for循环输出i为同一值的问题
2020-12-24 10:30
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
文章标题:浅谈js for循环输出i为同一值的问题
文章链接:http://soscw.com/index.php/essay/37902.html