<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<script>
/*
什么是函数组合?
就是多个函数进行封装,然后输入一个值,可以得到不同的返回值
*/
function lpoh(a){
return a+"咯咯咯"
}
function lpo(a){
return a
}
var greet=function(a){
return lpo(lpoh(a))
}
greet(5)
console.log(greet(5))
//这样把多个函数组合起来就是函数组合,输入一个值可以得到转换的不同的值
/*
优化1:
*/
var compose=function(lpoh,lpo){
return function(a){
return lpo(lpoh(a));
}
}
var greet=compose(lpoh,lpo)
greet(5)
console.log(greet(5))
//但这样会右一个问题就是,需要写多个时候的就是需要嵌套很多的compose(d, compose(c, compose(b, a)))
/*
优化compose函数,可以获得多个参数
*/
function composen() {
var args = arguments;//这个args是代表这个我们传入的所有函数
console.log(args)
var start = args.length - 1;
console.log(start)//1
return function() {
var i = start;
var result = args[start].apply(this, arguments);
//这里就说把composen(lpoh,lpo)函数赋值给了 greet(5)函数,所以 greet(5)函数的区域就是composen(lpoh,lpo)返回值的区域
console.log(arguments)//这里只有一个5的数组
console.log(args[start])//此时这个为数组中第二个函数
console.log(result)//5
while (i--) result = args[i].call(this, result);//这里是把上面的5传进来这里我们取调用第一个函数lpoh
return result;
};
};
var greet=composen(lpoh,lpo)
greet(5)
console.log(greet(5))
</script>
</body>
</html>