在这段代码中,复制自eloquent javascript的第15章,keyup事件侦听器做什么?

在这段代码中,复制自eloquent javascript的第15章,keyup事件侦听器做什么?,javascript,events,javascript-events,event-handling,Javascript,Events,Javascript Events,Event Handling,在以下复制自的代码中,按[code[event.keyCode]]如何作为布尔值结束?我就是不明白为什么需要'keyup'事件侦听器 这样做的目的是确保按住'keydown'键时只注册一次。我认为当您按下按键时,可能会触发keyup事件,正如keydown事件中的引用所示,但该资源指出功能已中断 var arrowCodes = {37: "left", 38: "up", 39: "right"}; function trackKeys(codes) { var pressed = Ob

在以下复制自的代码中,
按[code[event.keyCode]]
如何作为布尔值结束?我就是不明白为什么需要
'keyup'
事件侦听器

这样做的目的是确保按住
'keydown'
键时只注册一次。我认为当您按下按键时,可能会触发keyup事件,正如
keydown
事件中的引用所示,但该资源指出功能已中断

var arrowCodes = {37: "left", 38: "up", 39: "right"};

function trackKeys(codes) {
  var pressed = Object.create(null);
  function handler(event) {
    if (codes.hasOwnProperty(event.keyCode)) {
      var down = event.type == "keydown";
      pressed[codes[event.keyCode]] = down;
      event.preventDefault();
    }
  }
  addEventListener("keydown", handler);
  addEventListener("keyup", handler);
  return pressed;
}
下面是解释这段代码的文本。我一点也不明白,
true
false
从何而来

注意两种事件类型如何使用相同的处理程序函数。信息技术 查看事件对象的type属性,以确定是否应将键状态更新为true(“keydown”)或false(“keyup”)


真值来自以下代码行:

var down = event.type == "keydown";
如果
event.type
等于
“keydown”
,则将
down
设置为true,否则设置为false,并可读取为:

var down = (event.type == "keydown");
或者(更详细):

然后的第二行继续将该真值存储到按下的
数组中:

pressed[codes[event.keyCode]] = down;
完全一样

var down;
if ( event.type == "keydown" ) { down = true; }
else                           { down = false; }
如果你的问题是关于其他事情,那么请注明

布尔值来自 var down=event.type==“keydown”


RHS的优先级始终更高,因此将计算右第一个表达式event.type==“keydown”,其中的运算符为“等于”因此,该函数的输出将基于比较表达式的结果,该表达式将仅为布尔值。

是否每次运行该函数时都会创建所有这些对象的新实例?您的代码将创建一个新实例。当调用
trackKeys()
(外部函数)时,将创建按下的对象
handler()
(内部函数)可以使用该对象。另见。
var down = event.type == "keydown";
var down;
if ( event.type == "keydown" ) { down = true; }
else                           { down = false; }