函数绑定与函数柯里化

Posted chenzilin

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了函数绑定与函数柯里化相关的知识,希望对你有一定的参考价值。

函数绑定

函数绑定要创建一个函数,可以在特定的this环境中以指定参数调用另一个函数

实现一个简单的bind函数

function bind(fn, context) {
  return function() {
    return fn.apply(context, arguments)
  }
}

在bind()中创建了一个闭包,闭包使用apply()调用传入的函数,并给apply()传递context对象和参数

函数柯里化

函数柯里化用于创建已经设置好了一个或多个参数的函数。它也是使用闭包返回一个函数,不过它与函数绑定的区别是当函数被调用时,返回的函数还需要设置一些传入的参数

实现一个简单的柯里化函数

function curry(fn) {
  // 获取除函数外的其他参数,组成一个数组
  const args = Array.prototype.slice.call(arguments, 1)
  return function() {
    // 获取返回函数中的参数
    const innerArgs = Array.prototype.slice.call(arguments)
    const finalArgs = args.concat(innerArgs)
    return fn.apply(null, finalArgs)
  }
}

通过函数柯里化,我们可以实现一个简单叠加运算

function add(...nums) {
  let sum = 0
  nums.forEach(item => {
    sum += item
  })
  return sum
}

console.log(curry(add, 1, 2, 3)(4, 5, 6)) // 21

以上是关于函数绑定与函数柯里化的主要内容,如果未能解决你的问题,请参考以下文章

转载JS中bind方法与函数柯里化

柯里化与反柯里化

函数式编程-函数的合成与柯里化

JavaScript高级函数相关知识:函数纯函数柯里化严格模式

JavaScript高级函数相关知识:函数纯函数柯里化严格模式

[Effective JavaScript 笔记]第26条:使用bind方法实现函数的柯里化