0

我想将 setTimeout() 输出保存为变量。

例如:

function time() {
 return  (new Date).getTime();
 }

for (var x=0; x<10; x++) {
   setTimeout( time() , 2000);
}

上面的 javascript 代码每 2 秒以毫秒为单位返回时间,最多 10 次。

所以我们将得到 10 个输出。我想将这些输出保存为 10 个变量。所以我将能够计算平均值等。

请任何帮助将不胜感激。

4

2 回答 2

9

上面的 javascript 代码每 2 秒以毫秒为单位返回时间,最多 10 次。

不,它没有。它time 立即调用并将其返回值传递给setTimeout(它不会对它做任何事情),因为你有()after time。如果您有setTimeout(time, 2000),它将安排 10 次调用time,但所有调用都会在大约 2 秒后发生(不是两秒一次)。

所以我们将得到 10 个输出。我想将这些输出保存为 10 个变量

这就是数组的用途。:-)

var times = [];

function time() {
    times.push((new Date).getTime());
    if (times.length < 10) {
        setTimeout(time, 2000);
    }
}

setTimeout(time, 2000);

或者如果由于某种原因您不能time直接修改:

var times = [];

function time() {
    return (new Date).getTime();
}

function nextTime() {
    times.push(time());
    if (times.length < 10) {
        setTimeout(nextTime, 2000);
    }
}

setTimeout(nextTime, 2000);
于 2013-08-16T16:39:32.817 回答
1

一个替代循环可能是

编辑:根据您的评论之一,此脚本现在也输出平均值

var times = [];

var calculateAverage = function() {
  var sum = times.reduce(function(sum, t) { return sum += t; }, 0);
  console.log("Average:", sum/times.length);
};

var timer = setInterval(function() {
  times.push((new Date).getTime());
  if (times.length === 10) {
    clearTimeout(timer);
    calculateAverage();
  }
}, 2000);

输出

平均:1376671898024

于 2013-08-16T16:48:49.537 回答