将参数传递给函数,同时保留事件处理程序

Passing a parameter to a function, while keeping the event handler

可能有人问过这个问题,但进行了简短的搜索后,我找不到答案。

我正在创建一个函数来处理用户事件,但我不知道如何在不破坏事件处理程序的情况下将参数传递给该函数。

这是我的代码:

function keydown(e) {
e = e || window.event;
if (e.keyCode == '38' || e.keycode == '40' || e.keyCode == '37' || e.keyCode == '39')
    e.preventDefault();

switch(e.keyCode){
    case 38: //Up
        console.log('UP');
        break;
    case 40: //Down
        console.log('DOWN');
        break;
    case 37: // Left
        console.log('LEFT');
        break;
    case 39: //Right
        console.log('RIGHT');
        break;
}}

我想要这样的东西:

    function keydown(e, myParam) {
        console.log(myParam); // Console logging the second parameter
        e = e || window.event;
        if (e.keyCode == '38' || e.keycode == '40' || e.keyCode == '37' || e.keyCode == '39')
            e.preventDefault();

        switch(e.keyCode){
            case 38: //Up
                console.log('UP');
                break;
            case 40: //Down
                console.log('DOWN');
                break;
            case 37: // Left
                console.log('LEFT');
                break;
            case 39: //Right
                console.log('RIGHT');
                break;
        }
    }

有人有什么建议吗?

您可以使用闭包:

function keydown(param) {
  return function(e) {
    console.log(param)
    ...
  }
}

elem.addEventListener('keydown', keydown(param))