首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >setTimeout问题

setTimeout问题
EN

Stack Overflow用户
提问于 2010-07-24 16:44:16
回答 2查看 1.5K关注 0票数 2

我和setTimeout有点问题..我不知道这为什么行不通..

代码语言:javascript
复制
$(document).ready(function(){
var counterNum = 0;

function tick()
{        
    addText(counterNum);
    setTimeout('tick()',1000);
    counterNum++;
}

function addText(strNum)
{
 $("div.counter").empty();
 $("div.counter").append(strNum);           
}
});​

您可以在此处查看实时预览LINK

还有,先生,这两者的区别是什么?

代码语言:javascript
复制
setTimeout('tick()',1000);

代码语言:javascript
复制
setTimeout(tick(),1000);
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-07-24 16:51:58

尝试:

代码语言:javascript
复制
$(document).ready(function(){
var counterNum = 0;

function tick()
{        
    addText(counterNum);
    setTimeout(tick,1000);
    counterNum++;
}

function addText(strNum)
{
 $("div.counter").empty();
 $("div.counter").append(strNum+"");   

}

tick();

});

两者之间的区别

代码语言:javascript
复制
setTimeout('tick()',1000)

代码语言:javascript
复制
setTimeout(tick(), 1000)

第二个命令不会等待1000ms来执行,但如果您将其更改为

代码语言:javascript
复制
setTimeout(tick, 1000)

它实际上是一样的。从技术上讲,它将改变从何处调用函数的范围。

票数 4
EN

Stack Overflow用户

发布于 2010-07-24 17:14:33

在传入字符串的情况下,JavaScript必须对其求值才能运行代码。对于setTimeOut,您应该始终使用这样的模式:

代码语言:javascript
复制
var self = this;
setTimeout(function(){tick();},1000);

这给了你闭包,并允许你绕过这样一个事实,即使用setTimeOut改变了全局对象窗口(对于第一次遇到它的开发人员来说,这是一个可恶的小惊喜)。

尝试与Fredrik推荐的相结合,你应该会有很好的体型。

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

https://stackoverflow.com/questions/3324424

复制
相关文章

相似问题

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