Javascript 如何使setTimeout调用setInterval使其在一段时间后执行?

Javascript 如何使setTimeout调用setInterval使其在一段时间后执行?,javascript,function,setinterval,delay,clearinterval,Javascript,Function,Setinterval,Delay,Clearinterval,我希望我的doSomething在与setInterval的interval不同的时间后执行,因此我使用了setTimeout(doSomething,5000)这样我可以在5秒后调用doSomething,但这似乎没有发生 关于我需要使用clearInterval使setInterval在我声明的条件下停止执行,并且我需要有interval时间使setInterval与doSomething执行开始的延迟不同,如何使doSomething在5秒后开始执行 函数doSomething(){ 设

我希望我的
doSomething
在与
setInterval
interval
不同的时间后执行,因此我使用了
setTimeout(doSomething,5000)
这样我可以在5秒后调用
doSomething
,但这似乎没有发生

关于我需要使用
clearInterval
使
setInterval
在我声明的条件下停止执行,并且我需要有
interval
时间使
setInterval
doSomething
执行开始的延迟不同,如何使
doSomething
在5秒后开始执行

函数doSomething(){
设a=1;
返回设置间隔(()=>{
控制台日志(a);
if(a<6){
a++;
}否则{
返回a=1;
清除间隔(id);
}
}, 1000);
}
var id=剂量测定法();
设置超时(剂量计,5000)试着这样做

function doSomething() {
        let a = 1;
        return setInterval(() => {
            console.log(a);
            if (a < 6) {
                a++;
            } else {
                clearInterval(id)
                return a = 1;
            }
        }, 1000);
    }

    var id = doSomething();
    setTimeout(doSomething, 5000);
函数doSomething(){
设a=1;
返回设置间隔(()=>{
控制台日志(a);
if(a<6){
a++;
}否则{
清除间隔(id)
返回a=1;
}
}, 1000);
}
var id=剂量测定法();
设置超时(剂量计,5000);
var id=doSomething()
立即调用函数(从而启动间隔)。 由于
setInterval()
clearInterval()
都在同一个函数中,因此不需要返回间隔ID。只需在函数中本地跟踪它即可。这样,您只需调用
doSomething()
,它就会自动启动和停止

最后,请注意,
setInterval()
的第一次调用不会立即执行,而是等待给定的延迟。因此,如果希望第一次调用在5秒之后,则需要从
setTimeout()的
5000
中减去
setInterval()的
1000
。(或者立即手动调用重复函数。)

函数doSomething(){
设a=1;
让intervalId=setInterval(()=>{
控制台日志(a);
if(a<6){
a++;
}否则{
clearInterval(intervalId);
}
}, 1000);
}

设置超时(剂量测量,4000)设置超时运行
doSomething
关于4s延迟
doSomething
执行第一个console.log约1s延迟
因此,第一个console.log在4s+1s==5s延迟后启动

函数doSomething(){
设a=1
,id=setInterval(()=>{
console.log(a++);
如果(a>5)清除间隔(id);
}, 1000);
}

设置超时(剂量测量,4000)首先。如果调用创建间隔的函数,它将创建一个间隔。如果不使用超时,则不能调用函数并期望它有一个超时

这项工作:

function foo() {
    var i = 0;
    var iId = setInterval(() => {
        console.log('Hello World -' + i);
        i++;
        if (i > 5) {
            clearInterval(iId);
        }
    }, 1000);   
}
然后:


结果没有差别!谢谢你解决我的问题,并特别与我分享你的知识!我这里有一个小问题,我如何在else条件中设置
a=1
?@christy就是这样,但它不会有任何效果。
a
变量的作用域在
doSomething()
函数中。当函数完成且间隔被清除时,它实际上不再存在。无法访问它,最终将被收集。学会了一些新的东西,祝福你!:)
setTimeout(() => { foo(); }, 5000)