Javascript .getTime()是如何工作的?
这句话为什么有效?我正在尝试以每秒20-25帧的速度更新屏幕。我明白这是为什么我只是不明白它是怎么工作的。如果我们使用new Date().getTime()-lastLoopRun,为什么每次结果都不是零,因为lastLoopRun等于new Date().getTime()?我知道这与变量从0开始这一事实有关,但这对我来说没有多大意义Javascript .getTime()是如何工作的?,javascript,loops,frame-rate,Javascript,Loops,Frame Rate,这句话为什么有效?我正在尝试以每秒20-25帧的速度更新屏幕。我明白这是为什么我只是不明白它是怎么工作的。如果我们使用new Date().getTime()-lastLoopRun,为什么每次结果都不是零,因为lastLoopRun等于new Date().getTime()?我知道这与变量从0开始这一事实有关,但这对我来说没有多大意义 var lastLoopRun = 0; function loop() { if (new Date().getTime() - lastL
var lastLoopRun = 0;
function loop() {
if (new Date().getTime() - lastLoopRun > 40) {
handleControls();
showSPrites();
lastLoopRun = new Date().getTime();
}
setTimeout('loop();', 2);
}
选中
lastLoopRun
时,它尚未更新到当前时间
因此,在循环开始时,它仍然具有上一个循环的旧值,或者为0
如果它在循环开始时更新,它将始终是0,如您所说。new Date()。getTime()
返回1970年1月1日00:00:00 UTC和当前时间之间经过的毫秒数。所以它每1秒增加1000
function loop(){…;setTimeout('loop();',2);}
每2毫秒调用一次loop()
loop() -> elapsed about 40 ms after previous action? -> after 2 ms
-> loop() -> elapsed about 40 ms after previous action? -> after 2 ms
-> loop() -> elapsed about 40 ms after previous action? -> after 2 ms
-> loop() -> OK! elapsed -> do action -> update timestamp -> after 2 ms
-> loop() -> elapsed about 40 ms after previous action? -> after 2 ms
-> ...
因为时间会发生变化,只有当它进入if.hmmm ok时才会更新,所以这意味着新的Date().getTime()从循环的开始处开始,并且它受到setTImeout方法的影响。正确吗?暂时忽略setTimeout,它只需在2秒内再次调用循环
getTime()
始终返回当前时间,但在循环开始时,lastLoopRun
未设置为当前时间。它设置为上一个循环结束的时间。这就是为什么从当前时间中减去它不会给你0。好吧,很抱歉再次打扰你,但我只想确保我明白了这一点。因此,在if语句中,new Date().getTime()将被0减去,因为var lastLoopRun=0。这将始终使if语句大于40。然后lastLoopRun将被更新到当前时间,并创建一个时差。是的,if语句在第一个循环中始终为true,然后只有在距离上次为true的时间超过40ms时才为true。