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

如何正确编写可接收带参复杂函数的timer函数?

问题分析与解决方案

错误原因

你当前的调用方式timer(sortFunc1(arrayGenerator(COUNT), arg1...))会立即执行sortFunc1,把它的返回值(通常排序函数返回的是排序后的数组,而非函数)传给timer。而timer函数里尝试调用func(),自然会抛出func is not a function的错误——因为你传进去的根本不是函数。

两种可行的修复方案

方案1:让timer接收函数本身和参数

修改timer,使其支持传入目标函数和对应的参数,内部通过展开运算符执行函数:

function timer(func, ...args) {
  const start = Date.now();
  func(...args); // 执行目标函数并传入参数
  console.log(`${func.name} 执行耗时: ${Date.now() - start}ms`);
}

调用方式调整为:

timer(sortFunc1, arrayGenerator(COUNT), arg1, arg2);
timer(sortFunc2, arrayGenerator(COUNT), arg1);
// ...

这种方式逻辑清晰,能直接看到被计时的函数和参数。

方案2:用匿名函数包裹原函数调用(贴近你最初的调用形式)

保持timer的基本结构不变,但调用时把原函数的调用包裹在一个无参匿名函数里,这样传给timer的才是真正的函数:

function timer(func) {
  const start = Date.now();
  func();
  console.log(`执行耗时: ${Date.now() - start}ms`);
}

调用方式调整为:

timer(() => sortFunc1(arrayGenerator(COUNT), arg1...));
timer(() => sortFunc2(arrayGenerator(COUNT), arg1...));
// ...

匿名函数会在timer内部调用func()时才执行,避免了原函数提前执行的问题,完全贴合你想要的调用语法。

内容的提问来源于stack exchange,提问作者Денис Федотов

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 23:20:57