解析Lodash中createMathOperation函数的工作原理及参数传递逻辑
我来帮你把这段代码拆解开,用更直白的写法和步骤解释清楚,你就能明白整个流程啦!
首先,这段代码用到了高阶函数(就是能接收函数作为参数,或者返回函数的函数),createMathOperation就是这样一个函数。我们先把所有箭头函数转换成普通函数的长形式,这样更容易看明白:
// 把箭头函数改成普通函数的长形式 function createMathOperation(operator) { // 这里打印的operator就是你传入的运算函数 console.log(operator); // 返回一个新的内部函数 return function innerFunction(value, other) { // 调用传入的operator函数,把value和other作为参数传进去 return operator(value, other); }; } // 单独定义加法函数,替代原来的箭头函数 function addNumbers(augend, addend) { return augend + addend; } // 调用createMathOperation,传入加法函数,得到add这个函数 const add = createMathOperation(addNumbers); // 调用add(1,2),本质是调用innerFunction(1,2) add(1, 2); // 结果是3
接下来一步步拆解执行流程:
- 定义
createMathOperation函数:它的作用是“包装”一个运算逻辑(比如加法),返回一个可以直接调用的运算函数。它的参数operator是一个函数,代表你要执行的运算。 - 定义
addNumbers函数:这就是普通的加法逻辑,接收两个参数augend(被加数)和addend(加数),返回它们的和。 - 创建
add函数:当你执行createMathOperation(addNumbers)时,createMathOperation内部的operator就指向了addNumbers这个加法函数,然后它会返回内部定义的innerFunction,这个innerFunction就是add变量实际指向的东西。 - 调用
add(1,2):这时候其实是调用innerFunction(1,2),innerFunction会把自己的参数value(也就是1)和other(也就是2)传给operator(也就是addNumbers),相当于执行addNumbers(1,2),最终得到1+2=3的结果。
关于你困惑的参数对应:value对应augend,other对应addend,因为函数调用时参数是按顺序传递的——第一个参数传给函数的第一个形参,第二个传给第二个形参,所以operator(value, other)就等同于把value作为被加数,other作为加数代入加法逻辑。
内容的提问来源于stack exchange,提问作者Isaac
相关产品推荐
相关产品推荐

