如何向嵌套内部函数传递数组参数及传递内部函数作为参数?
JavaScript高阶函数的参数传递问题
先贴出题目中的代码:
const score = [98, 76, 94, 82, 70, 95, 45, 90] const determinePass = function (threshold) { return function (array) { return array.map(function (value) { return value > threshold ? "pass" : "fail"; }) } }
1. 怎么给内部函数传数组参数?
determinePass是个高阶函数,得先传入及格线threshold,它才会返回那个负责处理数组的内部函数。有两种简单的传参方式:
- 链式直接调用
调用determinePass时先给阈值,紧接着跟上数组参数:
// 设定80分为及格线,直接传入score数组 const result = determinePass(80)(score); console.log(result); // 输出: ["pass", "fail", "pass", "pass", "fail", "pass", "fail", "pass"]
- 先存内部函数再调用
把determinePass返回的内部函数存成变量,之后再给这个变量传数组:
// 先生成一个以80分为及格线的判断函数 const checkPass80 = determinePass(80); // 传入score数组得到结果 const result = checkPass80(score); console.log(result); // 输出和上面一样
2. 怎么把内部函数作为参数传递?
determinePass(threshold)的返回值就是那个内部函数,所以直接把这个返回值当成参数传给其他函数就行。举个实际例子,写个批量处理多个数组的函数,把内部函数传进去:
// 批量处理函数:接收判断函数和任意数量的数组 function batchCheck(checkFunc, ...arrays) { return arrays.map(arr => checkFunc(arr)); } // 先生成内部函数(70分为及格线) const checkPass70 = determinePass(70); // 把这个内部函数作为参数传给batchCheck const multipleResults = batchCheck(checkPass70, score, [65, 88, 72]); console.log(multipleResults); // 输出结果: // [ // ["pass", "pass", "pass", "pass", "pass", "pass", "fail", "pass"], // ["fail", "pass", "pass"] // ]
你也可以不用提前存变量,直接在传参时调用determinePass生成内部函数,效果完全一样:
const multipleResults = batchCheck(determinePass(70), score, [65, 88, 72]);
内容的提问来源于stack exchange,提问作者Darudul Islam
相关产品推荐
相关产品推荐

