Skip to main content

函数柯里化

基本概念

  • 把接受多个参数的函数变换成接受一个单一参数(最初函数的第一个参数)的函数
  • 返回接受余下的参数
  • 返回结果的新函数

柯里化的意义

  • 供不方便传入参数使用
  • 方法调用时参数固定

代码实现

返回一个新的函数 新函数this指向bind的第一个参数 其余参数作为新函数的参数传入

Function.prototype.myBind = function (thisArg) {
if (typeof this !== 'function') {
throw new Error('Function argument must be a function')
}
const self = this
// 去除第一个 this 指向参数
const args1 = Array.prototype.slice.call(arguments, 1)
const resultFn = function () {
const args2 = Array.prototype.slice.call(arguments)
return self.apply(this instanceof resultFn ? this : thisArg, args1.concat(args2))
}

const fn = new Function()
fn.prototype = self.prototype
resultFn.prototype = new fn()
return resultFn
}