Javascript 带回调(香草)的计时器抛出TypeError

Javascript 带回调(香草)的计时器抛出TypeError,javascript,Javascript,让我从以下内容开始:我对JavaScript相当陌生,我正在尝试实现一个带有回调函数的计时器。当它运行时抛出一个错误(typeError,callback不是函数) 有人能给我指出正确的方向/告诉我我错过了什么吗? 谢谢, 凯西 我的代码: let time = 0; let myVar = setInterval(myTimer, 1000); function doSomething(){ console.log("something") } function m

让我从以下内容开始:我对JavaScript相当陌生,我正在尝试实现一个带有回调函数的计时器。当它运行时抛出一个错误(typeError,callback不是函数)

有人能给我指出正确的方向/告诉我我错过了什么吗? 谢谢,

凯西

我的代码:

let time = 0;
let myVar = setInterval(myTimer, 1000);

function doSomething(){
  console.log("something")
}

function myTimer(callback) {
  if (time === 10) {
    clearInterval(myVar);
    // excecute
    callback();
  } else {
    time++;
    console.log(time);
  }
}

myTimer(doSomething);

// output: 
// 1
// 2
// 3 
// (...)
// TypeError: callback is not a function 

问题是回调参数实际上并没有传递给间隔,只运行了一次。基本上,
myTimer(doSomething)
只运行一次,而
time
小于3。然后,setInterval中的myTimer继续运行,它没有回调参数。当if语句成功时,没有回调参数,因此它不起作用

相反,您应该在setInterval中使用匿名函数,以便可以使用参数调用myTimer

let time=0;
设myVar=setInterval(()=>myTimer(doSomething),1000);
函数doSomething(){
console.log(“某物”)
}
函数myTimer(回调){
如果(时间==3){
净距(myVar);
//过分的
回调();
}否则{
时间++;
console.log(时间);
}

}
问题在于回调参数实际上没有传递给间隔,只运行一次。基本上,
myTimer(doSomething)
只运行一次,而
time
小于3。然后,setInterval中的myTimer继续运行,它没有回调参数。当if语句成功时,没有回调参数,因此它不起作用

相反,您应该在setInterval中使用匿名函数,以便可以使用参数调用myTimer

let time=0;
设myVar=setInterval(()=>myTimer(doSomething),1000);
函数doSomething(){
console.log(“某物”)
}
函数myTimer(回调){
如果(时间==3){
净距(myVar);
//过分的
回调();
}否则{
时间++;
console.log(时间);
}

}
正如lemondoge提到的,您忘记传递函数参数了

这是一种我喜欢做事情的方式,我认为更具可读性和可重用性


变量计时器={
柜台:0,,
计时器:空,
回调:null,
站位:10,,
开始:函数(回调、速度){
this.callback=回调;
var self=这个;
this.timer=setInterval(函数(){
if(self.counter==self.stop){
clearInterval(自动定时器)
self.callback();
}
self.counter++;
},速度);
},
};
timer.start(函数(){
console.log('stopped');
}, 1000);

正如lemondoge提到的,您忘记传递函数参数了

这是一种我喜欢做事情的方式,我认为更具可读性和可重用性


变量计时器={
柜台:0,,
计时器:空,
回调:null,
站位:10,,
开始:函数(回调、速度){
this.callback=回调;
var self=这个;
this.timer=setInterval(函数(){
if(self.counter==self.stop){
clearInterval(自动定时器)
self.callback();
}
self.counter++;
},速度);
},
};
timer.start(函数(){
console.log('stopped');
}, 1000);

非常感谢L。这帮了大忙。非常感谢L。这帮了大忙。这使它更易于重用,谢谢米凯尔的解释。指出了我思维中的相同缺陷,但也向我展示了如何使其更具可配置性。伟大的这使得它更加可重用,谢谢你的解释米克尔。指出了我思维中的相同缺陷,但也向我展示了如何使其更具可配置性。伟大的