首页 > web前端 > js教程 > 为什么 `for` 循环中的 `setTimeout` 打印最后一个值两次,我该如何修复它?

为什么 `for` 循环中的 `setTimeout` 打印最后一个值两次,我该如何修复它?

Patricia Arquette
发布: 2025-01-03 22:50:40
原创
657 人浏览过

Why Does `setTimeout` in a `for`-Loop Print the Last Value Twice, and How Can I Fix It?

在 for 循环中使用 setTimeout 进行连续值输出

您在尝试使用 setTimeout 打印连续值时遇到了问题在 for 循环中,但它会导致最后一个值被打印两次。发生这种情况是因为当您直接在 setTimeout 函数中使用变量 i 时,其值会在函数执行时更新。要解决此问题,必须为每次迭代创建 i 的不同副本。

提供的解决方案通过声明一个名为 doSetTimeout 的辅助函数来实现此目的。在此函数中,声明一个新变量来保存 i 的当前值,然后在创建超时时将其作为参数传递。这可确保每个超时函数都有自己独特的 i 副本,从而消除执行期间值更新的任何问题。

function doSetTimeout(i) {
  setTimeout(function() {
    alert(i);
  }, 100);
}

for (var i = 1; i <= 2; ++i)
  doSetTimeout(i);
登录后复制

使用此解决方案,您可以按预期成功打印连续值 1 和 2。

以上是为什么 `for` 循环中的 `setTimeout` 打印最后一个值两次,我该如何修复它?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板