Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.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 .getTime()是如何工作的?_Javascript_Loops_Frame Rate - Fatal编程技术网

Javascript .getTime()是如何工作的?

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

这句话为什么有效?我正在尝试以每秒20-25帧的速度更新屏幕。我明白这是为什么我只是不明白它是怎么工作的。如果我们使用new Date().getTime()-lastLoopRun,为什么每次结果都不是零,因为lastLoopRun等于new Date().getTime()?我知道这与变量从0开始这一事实有关,但这对我来说没有多大意义

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。