Javascript 为什么我的for循环只提示我一次输入?

Javascript 为什么我的for循环只提示我一次输入?,javascript,for-loop,switch-statement,event-listener,Javascript,For Loop,Switch Statement,Event Listener,我希望用户能够单击向上箭头5次,每次记录单独的开始时间和结束时间。因此,控制台将返回它们的响应速度(msResponse) for(变量i=0;i

我希望用户能够单击向上箭头5次,每次记录单独的开始时间和结束时间。因此,控制台将返回它们的响应速度(msResponse)

for(变量i=0;i<5;i++){
var startTime=new Date().getTime();
文件。添加的文本列表器(“向下键”,功能触摸(e){
开关(如钥匙代码){
案例38:
var endTime=new Date().getTime();
var msResponse=endTime-startTime;
console.log(msResponse);
文件。移除VentListener(“向下键”,触摸);
打破
}
})};
我希望循环会提示我5次单击向上箭头。每次设置新的开始时间和结束时间

但是,我第一次单击向上箭头时,它会循环5次,每次循环都会略微增加msResponse

如果有人能帮我更好地理解这一点,那就太棒了


非常感谢

For循环用于重复和创建新变量。因为您的for循环只用于重复代码,所以它最终看起来是这样的:

var startTime = new Date().getTime();
    document.addEventListener("keydown", function touch(e) {
        switch (e.keyCode) {
            case 38: 
                var endTime = new Date().getTime();
                var msResponse = endTime - startTime;
                console.log(msResponse);
                document.removeEventListener("keydown", touch);
                break;
        }
    })};

/*Main problem you mentioned in your question was that time is only increasing ever so slightly. You are reassigning startTime = new Date() in your second iteration.*/


var startTime = new Date().getTime();
    document.addEventListener("keydown", function touch(e) {
        switch (e.keyCode) {
            case 38:
                var endTime = new Date().getTime();
                var msResponse = endTime - startTime;
                console.log(msResponse);
                document.removeEventListener("keydown", touch);
                break;
        }
    })};
我将创建一个记录每次按键的时间数组,并在数组达到.length=x时解除键绑定

var startTime = new Date().getTime();
var endTime = [startTime];


window.addEventListener( "keydown", function touch(e) {
  if(endTime[5] !== undefined){
    window.removeEventListener( 'keydown', touch() );
  }else if ( e.keyCode === 38 ){
    var msResponses = new Date().getTime();
    endTime.push(msResponses);
  }
});

此代码基于时间创建一个数字数组,您可以从开始处减去这些数字以获得调用函数后的时间,也可以从彼此之间减去这些数字以获得第一次按下和第二次按下、第二次和第三次按下之间的差。或者随便什么。

addEventListener
不是一个提示–它添加了一个每次按下一个键时都会运行的函数,并且在等待发生时不会暂停脚本。您只需添加一个侦听器,然后在按下5次后将其删除。
var startTime = new Date().getTime();
var endTime = [startTime];


window.addEventListener( "keydown", function touch(e) {
  if(endTime[5] !== undefined){
    window.removeEventListener( 'keydown', touch() );
  }else if ( e.keyCode === 38 ){
    var msResponses = new Date().getTime();
    endTime.push(msResponses);
  }
});