如何传递具有多个可能参数列表的回调函数

2023-12-06

下面是两个回调函数:

function callback_a(){
  alert('a');
}

function callback_b(p){
  alert('b says'+ p)'
}

如果我想使用callback_a

function test(callback){
  if(condition){
    callback();
  }
}

test(callback_a);

但功能test不适用于callback_b,那么如何实现一个通用函数,可以传递一些带有多个可能的参数列表的回调函数。


有以下三种选择:

  • 最简单的方法是使用扩展运算符:

    function test(callback, ...callback_args) {
      callback(...callback_args);
    }
    

    在这种情况下调用test为了功能callback_b会是这样的:

    test(callback_b,"b")
    
  • 第二种方法是使用arguments其作用域为 JavaScript 中的任何函数:

    function test(callback) {
      callback.apply(null, arguments.slice(1));
    }
    

    的调用test为了功能callback_b会是一样的:

    test(callback_b,"b")
    
  • 另一种选择是使用部分应用的函数。在这种情况下你应该定义b_callback像这样 (ES6句法):

    let callback_b = (p) => () => void{
        alert('b says'+ p)'
    }
    

    或没有ES6:

    function callback_b(p) {
        return function(){
            alert('b says'+ p)'
        }
    }
    

    并像这样调用它:

    test(callback_b("b"))
    
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何传递具有多个可能参数列表的回调函数 的相关文章

随机推荐