Я пытаюсь написать приложение, которое может записывать и сохранять нажатия клавиш в переменную под названием «горячая клавиша». Идея состоит в том, чтобы создать массив нажатий клавиш, чтобы определить горячую клавишу одновременных нажатий клавиш и действий с ними.
Проблема в том, что я продолжаю сталкиваться с проблемой области действия функции. Из того, что я понял о области действия функции, вложенные функции (в данном случае anyKey) должны иметь доступ ко всем переменным их родительской области (в данном случае testFunc ()).
Я чувствую, что упускаю что-то важное здесь, но я не уверен, что это такое. Я знаю, что это связано с вложенными функциями, сохраняющими переменные, но похоже, что у меня это должно работать. Есть идеи? Какие основные концепции мне нужны для самообразования здесь?
Спасибо заранее.
function testFunc() {
var hotkey = [];
console.log("hotkey length is:"+hotkey.length) //Yields "hotkey length is:0"
hotkey[0] = "dummy";
input.addEventListener("keydown", anyKey);
}
function anyKey(ev, txt, hotkey){ //If I don't enter hotkey as a paremeter, I'm notified "hotkey is not defined". If I _do_ enter it, I get "nested hotkey length is: undefined
console.log("nested hotkey length is:"+hotkey);
let target = ev.currentTarget;
let tag = target.tagName;
let char = ev.char || ev.charCode || ev.which;
log(char, tag);
let s = String.fromCharCode(char);
log(s);
/***
The following code, consequentially, doesn't work because hotkey.length isn't defined
***/
for(i = 0; i <= hotkey.length + 1; i++){
if (hotkey[i] === undefined || hotkey[i] === "dummy"){
hotkey[i] = char;
}
}