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

如何编写返回函数数组的JS函数?values方法运行报错求解

问题原因
  • 你定义的vf函数没有显式返回值,其内部调用的console.log()默认返回undefined。你在values函数中直接执行了f(i),相当于立即调用vf打印了对应数值,同时把返回的undefined推入了结果数组,这就是数组元素全为undefined的直接原因。
  • 你预期数组存储可调用的函数,但现有代码是直接执行函数拿返回值,没有做函数包装。同时循环变量用var声明存在变量提升问题,就算直接包装函数,所有函数最终拿到的都会是循环结束后的i值(也就是16),无法输出预期的10到15。
修正方案

调整values函数逻辑,用let声明循环变量形成块级作用域,每次循环把f(i)的执行逻辑包装成新函数推入数组即可:

function values(f, low, high) {
  const result = [];
  // let声明形成块级作用域,每次循环的i都是独立值
  for(let i = low; i < high; i++) {
    // 包装成函数,调用时才执行f(i)
    result.push(() => f(i));
  }
  return result;
}

// 如果需要调用函数后返回对应数值,给vf加上返回值即可
const vf = (p1) => {
  console.log(p1);
  return p1;
};

const arrayOfFuns = values(vf, 10, 16);
// 逐个调用函数即可打印对应数值
arrayOfFuns.forEach(fn => fn());
console.log(arrayOfFuns);
console.log(arrayOfFuns[0]());
运行输出
10
11
12
13
14
15
[ [Function (anonymous)], [Function (anonymous)], [Function (anonymous)], [Function (anonymous)], [Function (anonymous)], [Function (anonymous)] ]
10
10

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 03:27:03