JavaScript setTimeout setInterval 在一个函数内
我想我可能太累了,但我一生都无法理解这一点,我认为这是由于缺乏 javascript 知识
var itv=function(){
return setInterval(function(){
sys.puts('interval');
}, 1000);
}
var tout=function(itv){
return setTimeout(function(){
sys.puts('timeout');
clearInterval(itv);
}, 5500);
}
通过这两个函数,我可以调用
a=tout(itv());
并让循环计时器运行 5.5 秒,然后本质上是退出。
按照我的逻辑,这应该可行,但
var dotime=function(){
return setTimeout(function(){
clearInterval(function(){
return setInterval(function(){
sys.puts("interval");
}, 1000);
});
}, 5500);
}
对此事的任何见解都不会受到赞赏。
I think I might be overtired but I cannot for the life of me make sense of this, and I think it's due to a lack of knowledge of javascript
var itv=function(){
return setInterval(function(){
sys.puts('interval');
}, 1000);
}
var tout=function(itv){
return setTimeout(function(){
sys.puts('timeout');
clearInterval(itv);
}, 5500);
}
With these two functions I can call
a=tout(itv());
and get a looping timer to run for 5.5 seconds and then exit, essentially.
By my logic, this should work but it simply is not
var dotime=function(){
return setTimeout(function(){
clearInterval(function(){
return setInterval(function(){
sys.puts("interval");
}, 1000);
});
}, 5500);
}
any insight in this matter would be appreciated.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
它无法工作,因为您的
setInterval
将在超时后被调用!您原来的方法是正确的,您仍然可以将其包装成单个函数:it cannot work because because your
setInterval
will be called AFTER the timeout! your original approach is correct and you can still wrap this into single function:我认为您犯的错误是函数
itv
不返回setInterval(function(){ sys.puts('interval'); }, 1000)
它执行 setInterval(function(){ sys.puts('interval'); }, 1000) 然后返回 setInterval 生成的 ID。然后将该 ID 传递给clearInterval
函数以停止setInterval(function(){ sys.puts('interval'); }, 1000)
正在执行的操作。编辑:一个可用函数的示例。
I think the mistake you're making is that the function
itv
doesn't returnsetInterval(function(){ sys.puts('interval'); }, 1000)
it executessetInterval(function(){ sys.puts('interval'); }, 1000)
and than returns back an ID that setInterval generates. That ID is then passed to theclearInterval
function to stop whatsetInterval(function(){ sys.puts('interval'); }, 1000)
is doing.Edit: An example of one function that would work.
这是编写版本的另一种方式,您会看到您将一个函数传递给clearInterval,您应该在其中传递一个计时器id。
为了使它工作,你应该调用该函数:
或者,使用你的版本:
免责声明:我没有测试这个。
This is another way to write your version, you see that you pass a function to clearInterval, where you should have passed it a timer id.
To make it work you shoud call the function :
Or, using your version :
Disclaimer : I didn't test this.