Здравствуйте коллеги!
Помогите понять почему нет замыкания.
Вот кусок кода:
window.onload = function() {
createMatrix();
// зажжем ячейку
var row = 2;
var col = 7;
setCell(row, col, true);
// обработка передвижений
document.body.onkeydown = function(e) {
moveCell(e.keyCode);
};
}
Функция moveCell:
function moveCell(keyCode) {
switch (keyCode) {
case 39:
if (col % 20 === 0) return;
setCell(row, col, false);
col++;
setCell(row, col, true);
break;
case 37:
if (col === 1) return;
setCell(row, col, false);
col--;
setCell(row, col, true);
break;
case 38:
if (row === 1) return;
setCell(row, col, false);
row--;
setCell(row, col, true);
break;
case 40:
if (row % 20 === 0) return;
setCell(row, col, false);
row++;
setCell(row, col, true);
break;
}
}
Проблема в том что переменные row и col не видны в замыкании. Отладчик показывает, что самого замыкания нет. Соответственно при выполнении функции moveCell возникает ошибка.
До этого код был такой, как показано ниже. Переменные row и col были видны в замыкании и все работало.
Смысл манипуляции - хотел вынести все в отдельную функцию moveCell
window.onload = function() {
createMatrix();
// зажжем ячейку
var row = 2;
var col = 19;
setCell(row, col, true);
// обработка передвижений
document.body.onkeydown = function(e) {
switch (e.keyCode) {
case 39:
if (col % 20 === 0) return;
setCell(row, col, false);
col++;
setCell(row, col, true);
break;
case 37:
if (col === 1) return;
setCell(row, col, false);
col--;
setCell(row, col, true);
break;
case 38:
if (row === 1) return;
setCell(row, col, false);
row--;
setCell(row, col, true);
break;
case 40:
if (row % 20 === 0) return;
setCell(row, col, false);
row++;
setCell(row, col, true);
break;
}
};
}