精慕HU
2018-12-20 22:19:04
我想設置一個名為 bindKeys 的函數,如下:function bindKeys (flag) { function keydown(e) { if (e.keyCode == 27) { keys.push('l'); } } function keyup(e) { if (e.keyCode == 27) { keys.pop(); } } if(flag) { window.addEventListener('keydown', keydown); window.addEventListener('keyup', keyup); }else { window.removeEventListener('keydown', keydown); window.removeEventListener('keyup', keyup); }}我是想通過flag判斷是綁定事件還是解除綁定??墒俏覀兌贾?,每次調用這個函數時,keydown函數和keyup函數都會聲名為新的函數,導致解除綁定失效。那有沒有什么辦法實現這一功能呢?難道必須要將keydown函數和keyup函數聲名為全局函數嗎?求解答!
1 回答

犯罪嫌疑人X
TA貢獻2080條經驗 獲得超4個贊
用閉包保留上下文
function bindKeys () {
var keydown = function(e) {
if (e.keyCode == 27) {
keys.push('l');
}
};
var keyup = function(e) {
if (e.keyCode == 27) {
keys.pop();
}
};
return function(flag) {
if(flag) {
window.addEventListener('keydown', keydown);
window.addEventListener('keyup', keyup);
}else {
window.removeEventListener('keydown', keydown);
window.removeEventListener('keyup', keyup);
}
}
}
使用:
var fn = bindKeys();
fn(true);
fn(false);
添加回答
舉報
0/150
提交
取消