这个 Javascript 脚本有什么问题?
What is wrong with this Javascript script?
我正在这样写一个简单的计时器:
function timer(init){
console.log(init);
setTimeout(function(init){
timer(init+1);
},1000);
}
timer(1);
这是一个递归函数(注意:我知道这是一个无限循环,只是现在不重要)。然而,尽管看起来很简单,但它失败了,因为每个间隔的输出是 NaN,而不是预期的增加数字。
该功能非常简单,以至于我无法弄清楚问题出在哪里。我错过了什么?
您传递给 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();
这里的问题是您通过将参数传递给 setTimeout
的回调函数来覆盖 init
的值。
function timer(init) {
console.log(init);
setTimeout(function() {
timer(init+1);
},1000);
}
timer(1);
这样,init
值就是您传递给 timer
调用的值。
您需要提供一个匿名函数作为参数而不是字符串,后一种方法甚至不应该根据 ECMAScript 规范工作,但浏览器很宽容。
setTimeout(function() {
timer(init+1);
}, 1000)
我正在这样写一个简单的计时器:
function timer(init){
console.log(init);
setTimeout(function(init){
timer(init+1);
},1000);
}
timer(1);
这是一个递归函数(注意:我知道这是一个无限循环,只是现在不重要)。然而,尽管看起来很简单,但它失败了,因为每个间隔的输出是 NaN,而不是预期的增加数字。 该功能非常简单,以至于我无法弄清楚问题出在哪里。我错过了什么?
您传递给 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();
这里的问题是您通过将参数传递给 setTimeout
的回调函数来覆盖 init
的值。
function timer(init) {
console.log(init);
setTimeout(function() {
timer(init+1);
},1000);
}
timer(1);
这样,init
值就是您传递给 timer
调用的值。
您需要提供一个匿名函数作为参数而不是字符串,后一种方法甚至不应该根据 ECMAScript 规范工作,但浏览器很宽容。
setTimeout(function() {
timer(init+1);
}, 1000)