我这样写一个简单的计时器:
function timer(init){
console.log(init);
setTimeout(function(init){
timer(init+1);
},1000);
}
timer(1);
它是一个递归函数(注意:我知道它是一个无限循环,现在不重要)。但是看起来很简单,它会失败,因为每个区间的输出都是 NaN ,而不是按预期增加的数量。 功能很简单,我无法弄清问题是什么。我错过了什么?
答案 0 :(得分:2)
这里的问题是你通过将参数传递给init
的回调函数来覆盖setTimeout
的值。
function timer(init) {
console.log(init);
setTimeout(function() {
timer(init+1);
},1000);
}
timer(1);
这样init
值就是您传入timer
来电的值。
答案 1 :(得分:1)
你传递给setTimeout的函数体是一个回调函数,没有参数传递给它(因为setTimeout没有传递任何参数)。
function timer(init) {
console.log(init);
setTimeout(function() {
timer(init + 1);
}, 1000);
}
timer(1);
最简单的方法就是这样:
var t = 0;
function timer() {
console.log(++t);
setTimeout(timer, 1000);
}
timer();
答案 2 :(得分:0)
您需要将匿名函数作为参数而不是字符串提供,后一种方法甚至不应该按照ECMAScript规范工作,但浏览器只是宽松的。
{{1}}