我正在学习如何使用箭头功能,并且试图在下面转换我的代码。 funcCall和enterKey存在作用域问题。我相信箭头功能应该可以解决这个问题。
function pressKey(funcCall, enterKey = 13) {
document.addEventListener("keydown", _onKeyDown);
}
function _onKeyDown(e) {
if(e.keyCode === enterKey) {
e.preventDefault();
funcCall();
}
}
答案 0 :(得分:3)
您需要在_onKeyDown
范围内创建pressKey
,以便它可以通过闭包访问funcCall
和enterKey
:
function pressKey(funcCall, enterKey = 13) {
function _onKeyDown(e) {
if(e.keyCode === enterKey) {
e.preventDefault();
funcCall();
}
}
document.addEventListener("keydown", _onKeyDown);
}
使用箭头功能与否无关紧要。
答案 1 :(得分:2)
您想要的是对部分应用程序的关闭,是的,箭头函数可以很好地完成此操作:
const _onKeyDown = (funcCall, enterKey) => e => {
if (e.keyCode === enterKey) {
e.preventDefault();
funcCall();
}
};
function pressKey(funcCall, enterKey = 13) {
document.addEventListener("keydown", _onKeyDown(funcCall, enterKey));
}
但是,正如其他人所指出的那样,此功能并不是箭头功能所独有的,因此,如果您喜欢打字或不使用ECMAScript 2015语法而感到困惑:
function _onKeyDown(funcCall, enterKey) {
return function (e) {
if (e.keyCode === enterKey) {
e.preventDefault();
funcCall();
}
};
}
function pressKey(funcCall, enterKey = 13) {
document.addEventListener("keydown", _onKeyDown(funcCall, enterKey));
}