首页 > web前端 > js教程 > 为什么带有 setTimeout 的 For 循环打印意外的值?

为什么带有 setTimeout 的 For 循环打印意外的值?

Patricia Arquette
发布: 2024-12-29 07:46:15
原创
971 人浏览过

Why Does a For-Loop with setTimeout Print Unexpected Values?

包装在 setTimeout 中的 For 循环打印意外的值

在此脚本中,for 循环使用变量 i 从 1 到 2 进行迭代,并在循环内设置一个超时函数,延迟100毫秒来提醒i的值当它执行时。然而,预期的行为是脚本连续打印 1 和 2,但 3 却被警告两次。

意外的行为源于 i 在整个循环中共享并被修改为循环的事实取得进展。当超时函数执行时,i 已经达到 3,导致两个警报都显示该值。

要解决此问题并确保连续打印值,有必要为每个超时函数创建单独的 i 副本。这可以通过定义一个专用函数 doSetTimeout 来实现,该函数将 i 作为参数并使用该特定值设置超时。

使用 doSetTimeout 修改后的脚本如下:

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

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

通过此修改,循环的每次迭代都会创建 i 的新副本,并将其传递给 doSetTimeout,确保每次超时都以正确的值执行。

以上是为什么带有 setTimeout 的 For 循环打印意外的值?的详细内容。更多信息请关注PHP中文网其他相关文章!

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