window.addEventListener('keydown',function keydown_f(e){
if(e.code === 'ArrowDown') {
window.removeEventListener('keydown',keydown_f);
// do something
setTimeout(2000,function(){
window.addEventListener('keydown',keydown_f);
});
}
else if (e.code === 'ArrowUp') {
window.removeEventListener('keydown',keydown_f);
// do something
setTimeout(2000,function(){
window.addEventListener('keydown',keydown_f);
});
}
});
Я использую код выше для захвата события нажатия клавиш каждые 2 секунды. Я думал, что это не будет работать, потому что, когда 2000 мс позже добавляется прослушиватель событий назад (строка 6 и строки 13), он не указывает, какой параметр он получает, это как в первой строке я пишупараметр прохождения для прослушивателя событий
window.addEventListener('keydown',function keydown_f(){ //without "e"
и это должно вызвать ошибку как
Uncaught ReferenceError: e is not defined
Но на самом деле код работает, я не понимаю, почему, когда слушатель добавляется назад он распознавал e
без указания e
в качестве параметра?
Когда вы *** ссылаетесь *** на функцию, аргументы передаются автоматически, всегда, здесь нет ничего магического? – adeneo
@adeneo "аргументы передаются автоматически" --- это немного вводит в заблуждение. Вызывающий передает их явно, это не «автоматически». – zerkms
@zerkms - конечно, аргументы всегда должны быть переданы вызывающим, чтобы существовать в вызываемой функции, поэтому, я думаю, вы могли бы сказать, что аргументы передаются автоматически как в именованных, так и анонимных функциях, если они фактически переданы. Реальная проблема, с которой сталкивается OP, заключается в том, что мысль о том, что именование «анонимной» функции будет иметь какое-либо значение, исключает аргумент 'e' от функции, всегда будет« неопределенным », что еще более очевидно, независимо от того, что называется функцией, или как она называется. – adeneo