【问题标题】:setTimeout() in a for loop [duplicate]for循环中的setTimeout()[重复]
【发布时间】:2016-08-30 11:01:18
【问题描述】:
list = [1000,2000,3000,4000];
for (var i = 0; i < 4; i++) {
    setTimeout(console.log('Hello'), list[i]);}

为什么这段代码在列表中的时间之后没有打印出“Hello”?

【问题讨论】:

  • 你将console.log的结果传递给setTimeout`
  • 如果该编辑使现有答案过时,请不要编辑您的问题。最好提出一个新问题,但在这种情况下,这也是重复的。
  • 另外,我不建议将字符串传递给 setTimeout。有many reasons that is a bad idea。
  • 特别是,您不应该编辑您的问题以更正您的代码。

标签: javascript settimeout


【解决方案1】:

这是正确的做法:

list = [1000,2000,3000,4000];
for (var i = 0; i < 4; i++) {
    setTimeout(function(){console.log('Hello')}, list[i]);}

因为setTimeout 接受回调函数而不是指令

【讨论】:

  • 作为变体,setTimeout("console.log('Hello')", list[i]);
  • 使用 JS bin 和 its saying, dont 在循环中使用函数。我应该使用其他程序吗?
  • 看看jsfiddle.net
【解决方案2】:

您正在调用console.log()立即并将返回值作为参数传递给setTimeout。

你应该传递一个函数。 bind() 方法将返回一个新函数,该函数使用正确的上下文和您指定的参数调用 log。

setTimeout(console.log.bind(console, 'Hello'), list[i]);

【讨论】:

    【解决方案3】:

    试试这个

    list = [1000,2000,3000,4000];
    for (var i = 1; i <= 3; i++) {
        (function(index) {
            setTimeout(function() { alert(index); }, i * list[i]);
        })(i);
    }
    

    【讨论】:

      猜你喜欢
      • 2010-12-19
      • 2014-05-18
      • 2019-10-21
      • 2018-04-26
      • 1970-01-01
      • 1970-01-01
      • 2011-07-10
      相关资源
      最近更新 更多