这里有两个回调函数:
function callback_a(){
alert('a');
}
function callback_b(p){
alert('b says'+ p)'
}
Run Code Online (Sandbox Code Playgroud)
如果我想使用 callback_a
function test(callback){
if(condition){
callback();
}
}
test(callback_a);
Run Code Online (Sandbox Code Playgroud)
但是该函数test不适用于callback_b,那么如何实现一个可以传递一些带有多个可能参数列表的回调函数的通用函数。
共有三个选项:
最简单的方法是使用扩展运算符:
function test(callback, ...callback_args) {
callback(...callback_args);
}
Run Code Online (Sandbox Code Playgroud)
在这种情况下,test对函数的调用callback_b将是这样的:
test(callback_b,"b")
Run Code Online (Sandbox Code Playgroud)第二种方法是使用argumentswhich 作用域为 JavaScript 中的任何函数:
function test(callback) {
callback.apply(null, arguments.slice(1));
}
Run Code Online (Sandbox Code Playgroud)
testfor 函数的调用callback_b是相同的:
test(callback_b,"b")
Run Code Online (Sandbox Code Playgroud)另一种选择是使用部分应用的函数。在这种情况下,您应该b_callback像这样定义(ES6语法):
let callback_b = (p) => () => void{
alert('b says'+ p)'
}
Run Code Online (Sandbox Code Playgroud)
或没有ES6:
function callback_b(p) {
return function(){
alert('b says'+ p)'
}
}
Run Code Online (Sandbox Code Playgroud)
并像这样调用它:
test(callback_b("b"))
Run Code Online (Sandbox Code Playgroud)| 归档时间: |
|
| 查看次数: |
2597 次 |
| 最近记录: |