【问题标题】:JavaScript function works.. but not in for loopJavaScript函数有效..但不在for循环中
【发布时间】:2017-07-07 19:41:45
【问题描述】:
for (i = 0; i < 100; i++) {
  botManager();
};

只执行一次

botManager();
botManager();
botManager();

但这会执行 3 次。我很困惑。我试过用 console.log 和调试器进行调试;但无济于事。常见的解决方案有哪些?

【问题讨论】:

  • 你想让 botManager 执行 100 次?还是什么?
  • 似乎你的 botManager 函数调用了其他函数,这些函数需要很长时间才能完成,而循环执行速度相当快,因此你没有得到任何结果。你可以添加超时函数来增加一些延迟如果 botManager 返回一些结果,您可以使用链接使它们同步...
  • 将您的i 更改为 3 并尝试单步执行您的代码
  • 您可以从一个空的 botManager 实现开始,并在此过程中添加更多代码,直到您看到当前行为。
  • for 如果嵌套函数在 botManager()for 循环再次调用(即 1 毫秒)时尚未完成其工作,则循环将中断

标签: javascript jquery function loops for-loop


【解决方案1】:

为循环变量提供范围

for(let i = 0; i < 100; i++)

在你使用 for 循环的任何地方。或者最好在页面开头使用'use strict'

因为如果您在主 for 循环内调用的函数中使用 i 的其他 for 循环,则可能会导致问题。

【讨论】:

  • 谢谢你,耶稣。 “让”效果很好,现在我会尝试严格。我不知道甚至存在..但我知道我错过了一些东西!
  • 虽然这可以解决问题,但对理解问题没有帮助。问题中显示的代码不可能出现上述问题。 JavaScript 不会变得“忙”或“累”,也不会“忘记”如何运行循环。它只是不那样工作。问题出在其他地方,在问题中未显示的代码中。现在,如果其他一些代码是依赖于i 的值的异步代码,那就是另一回事了。但我们不可能从问题中显示的代码中知道这一点。
  • 还要考虑浏览器对let的支持。
  • @MichaelGeary 是的,我很抱歉。我试图猜测发生了什么,但我无法将我的猜测发布为评论,因为当时我缺乏足够的声望点,所以我别无选择,只能发布答案。
  • @ThanasisGrammatopoulos 我的答案已被编辑。以前我有 var i 并且在版本之后它变成了 let i
猜你喜欢
  • 2014-04-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-03-19
相关资源
最近更新 更多