Местонахождение переменной

внутри let работает не корректно(после каждого нажатия let left и let top ставит 0) снаружи вообще не работает, есть какой вариант?

let left = 0;
let top = 0;

window.onkeydown = function move_left() {
  if(event.keyCode == 37) {
    left = left - 10;
    document.querySelector('.person').style.left = left+'px';
  } else if(event.keyCode == 39) {
    left = left + 10;
    document.querySelector('.person').style.left = left+'px';
  }
  
  if(event.keyCode == 38) {
    top = top - 10;
    document.querySelector('.person').style.top = top+'px';
  } else if(event.keyCode == 40) {
    top = top + 10;
    document.querySelector('.person').style.top = top+'px';
  }
};
.person {
  width: 50px;
  height: 50px;
  background-color: red;
  position: absolute;
}
<div class="person">1</div>


Ответы (1 шт):

Автор решения: CbIPoK2513

Инициализируя let "вначале" вы получите ошибку SyntaxError: redeclaration of formal parameter "x", чтобы её обойти вы можете:

  1. Инициализировать переменные через var;
  2. Выполнять скрипт в самовыполняющейся функции:

(function() {
  let left = 0;
  let top = 0;

  window.onkeydown = function move_left() {
    if(event.keyCode == 37) {
     left = left - 10;
     document.querySelector('.person').style.left = left+'px';
    } else if(event.keyCode == 39) {
      left = left + 10;
      document.querySelector('.person').style.left = left+'px';
    }

    if(event.keyCode == 38) {
      top = top - 10;
      document.querySelector('.person').style.top = top+'px';
    } else if(event.keyCode == 40) {
      top = top + 10;
      document.querySelector('.person').style.top = top+'px';
    }
  };
})();
.person {
  width: 50px;
  height: 50px;
  background-color: red;
  position: absolute;
}
<div class="person">1</div>

  1. Использовать массив:

let param = {
    left: 0,
    top: 0
  };

window.onkeydown = function move_left() {
  if(event.keyCode == 37) {
   param.left = param.left - 10;
   document.querySelector('.person').style.left = param.left+'px';
  } else if(event.keyCode == 39) {
    param.left = param.left + 10;
    document.querySelector('.person').style.left = param.left+'px';
  }

  if(event.keyCode == 38) {
    param.top = param.top - 10;
    document.querySelector('.person').style.top = param.top+'px';
  } else if(event.keyCode == 40) {
    param.top = param.top + 10;
    document.querySelector('.person').style.top = param.top+'px';
  }
};
.person {
  width: 50px;
  height: 50px;
  background-color: red;
  position: absolute;
}
<div class="person">1</div>

→ Ссылка