首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >JS setTimeout不延迟

JS setTimeout不延迟
EN

Stack Overflow用户
提问于 2011-07-14 07:22:48
回答 3查看 814关注 0票数 1

好了,伙计们,我正试着每1/4秒左右在我的页面上添加数字。因此,更改对用户是可见的。我正在使用setTimeout,我的所有计算都是正确的,但没有任何延迟。代码如下:

代码语言:javascript
复制
for(var i = 0; i < 10; i++)
{
  setTimeout(addNum(i),250);
}

我也尝试过捕获返回值:

代码语言:javascript
复制
for(var i = 0; i < 10; i++)
{
  var t = setTimeout(addNum(i),250);
}

我还尝试使用函数语法作为setTimeout参数的一部分:

代码语言:javascript
复制
for(var i = 0; i < 10; i++)
{
  var t = setTimeout(function(){array[j].innerHTML + 1},250);
}

我还尝试过将代码放入字符串中&将函数调用放入字符串中。我从来不能让它延迟。请帮帮我!

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-07-14 07:29:34

也许相反,因为您多次运行同一个方法,所以应该使用setInterval方法?Here's an example of how you might do that.

票数 0
EN

Stack Overflow用户

发布于 2011-07-14 07:25:49

这样如何:

代码语言:javascript
复制
var i=0;
function adder() {
   if(i>=10) {return;}
   addNum(i++);
   setTimeout(adder,250);
}
adder();

当您执行超时时,您立即执行了函数(函数名后面跟着()将立即执行它,并将返回值传递给setTimeout(addNum(i),250);,以便在1/4秒后执行)。所以在一个循环中,会立即执行所有的10个。这就是你所看到的。

捕获返回值var t = setTimeout(...);很有帮助,但在您的用例中并非如此;该值是用于取消超时的计时器id号。

不确定您的最后一次尝试是什么,尽管它可能是addNum例程的函数体,因此同样的逻辑也适用于上面。

票数 3
EN

Stack Overflow用户

发布于 2011-07-14 07:26:57

试试setTimeout("addNum(“+i+ ")",250);它不工作的原因是它对参数求值并执行,然后将其更改为类似于setTimeout( addNum(i),250的结果);

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6686853

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档