函数绑定
函数绑定要创建一个函数,可以在特定的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