Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/449.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 为什么不是';t setInterval()返回我的函数';返回值是多少?_Javascript_Setinterval - Fatal编程技术网

Javascript 为什么不是';t setInterval()返回我的函数';返回值是多少?

Javascript 为什么不是';t setInterval()返回我的函数';返回值是多少?,javascript,setinterval,Javascript,Setinterval,我对编码非常陌生(2周的经验),所以请直说我关于这段代码的愚蠢问题。最终,我希望它持续运行名为“timer”的函数,它告诉我运行名为“add”的函数需要多长时间,在我的屏幕上显示结果,然后在每次运行时更新结果 function add(a,b){ return a + b; } function timer(){ var a = Math.floor(Math.random() * 101); var b = Math.floor(Math.random() * 101);

我对编码非常陌生(2周的经验),所以请直说我关于这段代码的愚蠢问题。最终,我希望它持续运行名为“timer”的函数,它告诉我运行名为“add”的函数需要多长时间,在我的屏幕上显示结果,然后在每次运行时更新结果

function add(a,b){ 
  return a + b;
}

function timer(){
  var a = Math.floor(Math.random() * 101);
  var b = Math.floor(Math.random() * 101);
  var start = performance.now();
  add();
  var end = performance.now();
  var duration = end - start;
  return duration + ' milliseconds';
}

t = setInterval(timer,1000);
这似乎是在返回数字“1”,之后什么也不做

现在当我替换

return duration + ' milliseconds' 

它做我想做的,除了我不想使用console.log的原因是,它在显示持续时间时跳转到一个新行,而不是用新的持续时间替换前一行。为了澄清这一点,我不希望每次运行的持续时间都变长,我只想显示一个持续时间,每次运行时都会更新和替换

function add(a,b){ 
  return a + b;
}

function timer(){
  var a = Math.floor(Math.random() * 101);
  var b = Math.floor(Math.random() * 101);
  var start = performance.now();
  add();
  var end = performance.now();
  var duration = end - start;
  return duration + ' milliseconds';
}

t = setInterval(timer,1000);

谢谢你的帮助

setInterval
是异步的,因此您不会以这种方式获取返回值。当您想
clearInterval
时,您要返回的号码是一个ID

但是我们可以说,为了好玩,setInterval是否尝试返回您的值

您确实执行了
t=setInterval(…)
,但当这种情况发生时,
setInterval
中的代码尚未执行。当时它刚刚被放入队列中,但是
t=…
的赋值没有等待


也许这会有帮助

您正在将
t
设置为
setInterval()的返回值

表示
setInterval()
返回以下内容:

超时ID。。。标识计时器的非零值数字


看起来您实际上想要的是将变量
t
设置在
timer()
中的某个位置,这样当
setInterval()
每1000ms调用一次时,它就会更新t。

函数console.log会附加到控制台上。因此,您必须清除控制台以实现您想要的功能

如果您使用的是chrome,请致电

clear() 
以前 计时器功能中的console.log()

希望你说的话有帮助

在我的屏幕上显示结果

我想您可能只是想更新元素的文本。如果只是想跟踪它,则需要在timer函数外使用一个变量,并在函数内更新该变量。正如其他人所指出的,
setInterval
将返回一个ID,以便稍后检索间隔。例如,如果您想停止计时器,您可以执行
clearInterval(t)

我创建了一个代码段,每次更新屏幕上的持续时间:

函数添加(a,b){
返回a+b;
}
函数计时器(){
var a=Math.floor(Math.random()*101);
var b=Math.floor(Math.random()*101);
var start=performance.now();
添加();
var end=performance.now();
var持续时间=结束-开始;
document.getElementById('duration').innerHTML=duration+'millides';
}
t=设置间隔(计时器,1000)

持续时间:
如果您希望在
setInterval
完成时收到通知,则可能需要使用承诺:

函数添加(a,b){
返回a+b;
}
功能计时器(延迟时间){
回报新的承诺(
功能(解析){
设定间隔(
函数(){
var a=Math.floor(Math.random()*101);
var b=Math.floor(Math.random()*101);
var start=performance.now();
添加();
var end=performance.now();
var持续时间=结束-开始;
解析(持续时间+毫秒);
},延迟时间
);
}
);
}
计时器(1000)。然后(
功能(t){
控制台日志(t);
}

);
setInterVal()
返回
timeoutID
这是一个“是一个数值,非零值”这里有很多很好的解决方案(谢谢大家!),但这是一个非常简单的解决方案,我在2毫秒内就找到了它;)