柯里化函数的目的:把多个参数拆开成多个函数,一个函数只有一个参数,使用闭包返回一个函数。
创建一个柯里化函数的通用方式
function curry(fn){
var args=Array.prototype.slice.call(arguments,1);//获取外部函数从第二个开始的参数
return function(){
var innerArgs=Array.prototype.slice.call(arguments);//获取内部函数全部参数
var finalArgs=args.concat(innerargs);//拼接内外参数
return fn.apply(null,finalArgs);//将所有参数返回给执行环境
}
}
function add(a,b){
return a+b;
}
var currieAdd=curry(add,7);
alert(currieAdd(3));//10
用柯里化实现bind
function bind(fn,context){
var args=Array.prototype.slice.call(arguments,2)
return function(){
var innerArgs=Array.prototype.slice.call(arguments);//获取内部函数全部参数
var finalArgs=args.concat(innerargs);//拼接内外参数
return fn.apply(context,finalArgs);//将所有参数返回给执行环境
}
}
const obj1={
var A=function(str1,str2){
return str1+str2+this.name
}
const obj2={
name="帅小卓"
}
const say=obj1.A.bind(obj2,'呼呼','噜噜')
console.log(say)//呼呼噜噜帅小卓
}