在javascript中计算差异和更新值

时间:2015-10-31 10:35:08

标签: javascript timer in-place

以下代码片段可以解决这个问题,但对我来说看起来很笨拙:

var lastFrame = performance.now();
function elapsedMillis(){
  var now = performance.now();
  var elapsedTime = lastFrame - now;
  lastFrame = now;
  return elapsedTime;
}

每次调用它都会计算自上次调用以来经过的时间。 performance.now()只应调用一次,因为它是最昂贵的操作。

我得到了这个,但我认为可能有更好的解决方案:

var lastFrame = performance.now();
function elapsedMillis(){
  var now = performance.now();
  var elapsedTime;
  return ([elapsedTime,lastFrame]=[now-lastFrame,now])[0];
}

elapsedTime并不是真的需要。

有没有更好的方法来编写这样的作业?

修改

我在这里使用destructuring assignment,这显然只是暂时由firefox支持。我不知道我也可以这样做:

var lastFrame = performance.now();
function elapsedMillis(){
  var now = performance.now();
  return ([,lastFrame]=[now-lastFrame,now])[0];
}

1 个答案:

答案 0 :(得分:0)

我认为第一个可能是一种控制 lastFrame 所用时间的方法,假设性能日期 ...

相反,第二个例子是完全错误的......因为它以无效左侧的作业结束并抛出错误的作业错误... 在stackoverflow中,除了此错误之外还有很多主题...

我的方式,假设是单音:



var elapsedTime = (function(performance) {
  var lastCall = performance.now();
  console.log(lastCall);
  
  return function() {
    var now = performance.now();
    var elapsed = now - lastCall;
    
    // reassigning lastCall each time you call the function make the function work with the last invocation, if you want to calc the elapsed time from the first invocation you have to not-reassign the lastCall variable!
    lastCall = now;
    
    return elapsed;
  };
})(window.Date);