我想设置一个名为bindKeys的函数,如下:functionbindKeys(flag){functionkeydown(e){if(e.keyCode==27){keys.push('l');}}functionkeyup(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函数声名为全局函数吗?求解答!
2 回答
犯罪嫌疑人X
TA贡献2080条经验 获得超4个赞
用闭包保留上下文functionbindKeys(){varkeydown=function(e){if(e.keyCode==27){keys.push('l');}};varkeyup=function(e){if(e.keyCode==27){keys.pop();}};returnfunction(flag){if(flag){window.addEventListener('keydown',keydown);window.addEventListener('keyup',keyup);}else{window.removeEventListener('keydown',keydown);window.removeEventListener('keyup',keyup);}}}使用:varfn=bindKeys();fn(true);fn(false);
RISEBY
TA贡献1856条经验 获得超5个赞
因为你每次调用bindKeys的时候,都生成了新的keydown和keyup函数,可以这样:keydown和keyup提升为全局量,要么就像楼上的那样
添加回答
举报
0/150
提交
取消
