You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将函数与参数一同作为实参传入目标函数?

解决方法:让wrap函数同时接收目标函数和附带参数

这是个很常见的需求,我给你分享几种实用的实现方案,你可以根据自己的使用场景来选:

方案1:直接传递函数+参数列表(一次性调用)

这种方式最简单,利用ES6的**剩余参数(Rest Parameters)和展开运算符(Spread Operator)**来实现。wrap函数先接收目标函数foo,然后接收后续所有的参数,最后调用foo的时候把这些参数展开传进去:

function wrap(foo, ...args) {
  // 把传入的参数展开后传给foo
  foo(...args);
}

// 调用示例:传入函数和两个参数
wrap((a, b) => { console.log(a + b); }, 10, 20); // 输出30

方案2:返回闭包延迟传参(可多次调用)

如果你希望先把目标函数foo传给wrap,之后再根据不同场景传入不同的参数,可以让wrap返回一个闭包函数,这个闭包会记住foo,然后在后续调用时接收参数并执行foo:

function wrap(foo) {
  // 返回一个新函数,这个函数接收参数并调用foo
  return (...args) => {
    foo(...args);
  };
}

// 调用示例:先绑定目标函数,再传入参数
const logSum = wrap((a, b) => { console.log(a + b); });
logSum(5, 3); // 输出8
logSum(100, 200); // 输出300

方案3:利用bind绑定参数(适合需要固定部分参数的场景)

如果需要给foo固定一部分参数,剩下的参数后续再传,可以结合Function.prototype.bind来实现:

function wrap(foo, ...fixedArgs) {
  // 绑定固定参数,返回一个新函数
  return foo.bind(null, ...fixedArgs);
}

// 调用示例:固定第一个参数为10,后续只传第二个参数
const addTen = wrap((a, b) => { console.log(a + b); }, 10);
addTen(5); // 输出15
addTen(20); // 输出30

这几种方案覆盖了大部分常见场景,你可以根据自己的需求选择最合适的~

内容的提问来源于stack exchange,提问作者rendom

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 11:14:14