如何编写返回函数数组的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
相关产品推荐
相关产品推荐

