包装在 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中文网其他相关文章!