功能范围问题,并转换为箭头功能

时间:2019-02-14 22:50:15

标签: javascript arrow-functions

我正在学习如何使用箭头功能,并且试图在下面转换我的代码。 funcCall和enterKey存在作用域问题。我相信箭头功能应该可以解决这个问题。

function pressKey(funcCall, enterKey = 13) {
    document.addEventListener("keydown", _onKeyDown);
}
function _onKeyDown(e) {
    if(e.keyCode === enterKey) {
        e.preventDefault();
        funcCall();
    }
}

2 个答案:

答案 0 :(得分:3)

您需要在_onKeyDown范围内创建pressKey,以便它可以通过闭包访问funcCallenterKey

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));
}