函数的柯里化
一、概念
接受多个参数的函数转换成接受单一参数的函数的操作。通俗理解为:只传递给函数的一部分参数来调用它,让它返回一个新函数去处理剩下的参数。
测试可用quokka.js(免费版即可) vscode的插件
二、参数定长柯里化
2.1 例一
1 | const add = (...args) => args.reduce((a, b) => a + b); |
用闭包把传入参数保存起来,当传入参数的数量足够执行函数时,就开始执行函数
1 | function currying(func) { |
2.2 例二
柯里化是在一个函数的基础上变换,得到一个新的预设了参数的函数。最后在调用新函数时候,实际上还是会调用柯里化前的原函数。
而且柯里化得到的新函数可以继续被柯里化,有点递归的感觉,不对不是递归,有点套娃的感觉
1 | function adds(a, b, c) { |
实现原理都是「用闭包把传入参数保存起来,当传入参数的数量足够执行函数时,就开始执行函数」
三、实际使用
1.bind
MDN的解释
Function.prototype.bind()
方法创建一个新的函数,在bind()
被调用时,这个新函数的this
被指定为bind
的第一个参数,而其余参数会被指定为新函数的参数,供调用时使用
总结!
柯里化属于函数式编程思想。柯里化时只是返回一个预置参数的新函数,没有立刻执行,实际上在满足条件后才会执行。不污染原函数。