描述:
JS——柯里化函数
实现:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<script>
/*
* 柯里化函数,传入参数仅作为存储
* 执行函数时,执行内容
*
*
* */
/* function curry() {
// var arg=Array.from(arguments);
var slice=Array.prototype.slice;
var arg=slice.apply(arguments);
var self=this;
return function () {
var arr=slice.apply(arguments);
console.log(arr);
// return self.apply(null,arg.concat(arr))
}
}
var fn=curry(10)();
console.log(fn)*/
Function.prototype.curry=function () {
var arg=Array.from(arguments);
var self=this;
return function () {
if(arguments.length===0){
return self.apply(null,arg);
}
arg=arg.concat(Array.from(arguments));
}
};
function fns() {
console.log(arguments);
}
var fn1=fns.curry();
fn1(20);
fn1(30);
fn1(40);
fn1();
/* function curry(fn) {
var arg=[];
var slice=Array.prototype.slice;
return function () {
if(arguments.length===0){
fn.apply(null,arg);
}else{
var arr=slice.apply(arguments);
arg=arg.concat(arr);
}
}
}
function getSum() {
var slice=Array.prototype.slice;
var arr=slice.apply(arguments);
var sum=arr.reduce(function (sum,item) {
return sum+item;
});
console.log(sum);
}*/
function curry(_fn) {
var arg=[];
var fn=_fn;
return function () {
if(arguments.length===0){
fn.apply(null,arg);
}else{
var arr=Array.from(arguments);
arg=arg.concat(arr);
console.log("这次传入的参数是:"+arr.join(),"现在这个数组中一共存了:"+arg.join());
}
}
}
function getSum() {
var arr=Array.from(arguments);
var sum=arr.reduce(function (sum,item) {
return sum+item;
});
console.log(sum);
}
var fn=curry(getSum);
fn(10);
fn(20);
fn(30);
fn();
</script>
</body>
</html>