[英]passing parameter for event listener
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秒捕獲一次keydown事件。 我以為那是行不通的,因為在2000ms之后,事件監聽器又被添加回去(第6行和第13行),它沒有指定獲取的參數,就像我在第一行中寫的那樣
window.addEventListener('keydown',function keydown_f(){ //without "e"
那應該觸發一個錯誤
未捕獲的ReferenceError:未定義e
但是實際上代碼是有效的,我不明白為什么在將偵聽器加回去時可以識別e
而沒有將e
指定為參數?
因為是在其中設置“ function keydown_f”的上下文,所以可以訪問:
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);
});
}
它在范圍內。
函數本身“ keydown_f”采用參數---“ e”。 因此,當您調用它時,可以說:window.addEventListener('keydown',keydown_f);
“事件”通過了。
基本上,“ addEventListener”會捕獲以下內容:“ keydown_f”,並執行以下操作:“ keydown_f(event)”
想想“ keydown_f”是一個回調,那么它就是一個回調。 “ addEventListener”使用該函數,然后“調用它”並傳遞其參數= event。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.