下記の箇所について疑問があります。
    if (e.key === word[loc]) {
      loc++;
      if (loc === word.length) {
        word = words[Math.floor(Math.random() * words.length)];
        loc = 0;
      }
      updateTarget();
この記述のところで、
   if (loc === word.length) {
        word = words[Math.floor(Math.random() * words.length)];
        loc = 0;
      }
と、
    updateTarget();
の順序が逆になると、新しいwordに変更されなくなってしまいます。
つまり、
    if (e.key === word[loc]) {
      loc++;
      updateTarget();
      if (loc === word.length) {
        word = words[Math.floor(Math.random() * words.length)];
        loc = 0;
      }
こういった状態です。
updateTarget();内で、locの値が変わっているわけではないと思いますし、問題ないのかと思ったのですが・・・。
なぜ、このようなことが起こってしまうのでしょうか?
よろしくお願いします。
この回答を見るにはプレミアムプランへの登録が必要です
プレミアムプランとは?