函数柯里化
基本概念
- 把接受多个参数的函数变换成接受一个单一参数(最初函数的第一个参数)的函数
- 返回接受余下的参数
- 返回结果的新函数
柯里化的意义
- 供不方便传入参数使用
- 方法调用时参数固定
代码实现
返回一个新的函数 新函数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
}