这个Javascript脚本有什么问题?

时间:2015-08-05 04:07:33

标签: javascript recursion settimeout

我这样写一个简单的计时器:

   function timer(init){
     console.log(init);
     setTimeout(function(init){
       timer(init+1);
     },1000);
   }

   timer(1);

它是一个递归函数(注意:我知道它是一个无限循环,现在不重要)。但是看起来很简单,它会失败,因为每个区间的输出都是 NaN ,而不是按预期增加的数量。 功能很简单,我无法弄清问题是什么。我错过了什么?

3 个答案:

答案 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}}