首先,偏函数涉及的概念有:
-
函数的柯里化:将接受多个参数的函数转化为接受单一参数(最初函数的第一个参数)的函数。例如,一个函数add(x,y,z),柯里化后可得到add(x)(y)(z)的格式。
-
偏函数:将某个函数的一部分参数固定下来,生成一个新的函数,该新函数的参数比原函数少。
在 JavaScript 中,利用柯里化的思想可以轻松实现偏函数。
下面是关于 JavaScript 中偏函数的几种实现方式:
- 使用 bind 方法:
bind 方法是 JavaScript 原生的函数方法,为函数绑定上下文(即 this)和参数,生成一个新的函数,该函数的参数已经被绑定,且不能再次被修改。
例如,有一个函数sum,接收两个参数 a 和 b:
function sum(a, b) {
return a + b;
}
偏函数示例:
var add = sum.bind(null, 1); // 固定 a = 1
console.log(add(2)); // 3
- 使用闭包:
利用闭包来创建一个可以存储参数的函数,待参数收集完毕后再进行运算。
例如,有一个函数sum,接收三个参数 a、b 和 c:
function sum(a, b, c) {
return a + b + c;
}
偏函数示例:
function partial(fn, ...fixedArgs) {
return function(...args) {
return fn(...fixedArgs, ...args);
}
}
var add = partial(sum, 1); // 固定 a = 1
console.log(add(2, 3)); // 6
上述代码中,partial 函数为一个通用的偏函数实现,接收一个要偏函数化的函数 fn 和一些要固定的参数 fixedArgs,返回一个新的函数,新函数的参数是传递给偏函数的所有参数,先放置固定参数,再放置新的参数,然后调用原始函数 fn。
二者实现方式相似,可以根据实际需求选择使用 bind 方法或是闭包。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:JavaScript中的偏函数你理解了吗 - Python技术站