/**
* 递归返回包装函数
* @param {Function} fn
* @param {Array} args
*/
var funcWraper = function(fn,args) {
var needArgs = fn.length;
return function() {
var newArgs = Array.prototype.slice.call(arguments,0);
args = args.concat(newArgs);
if(args.length === needArgs) {
return fn.apply(null,args);
}
return funcWraper(fn,args);
}
}
/**
* 函数柯里化
* @param {Function} fn
*/
var curry = function(fn){
var args = Array.prototype.slice.call(arguments,1);
var needArgs = fn.length;
var nowArgs = args.length;
if(nowArgs === needArgs){
return fn.apply(null,args);
}
return funcWraper(fn,args);
}
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Document</title>
</head>
<body>
<script src="jquery.min.js"></script>
<script src="curry.js"></script>
<script src="chunk.js"></script>
<script src="cb2promise.js"></script>
<script>
var a = function(a,b,c){
console.log(a);
console.log(b);
console.log(c);
}
curry(a,1,2)(3)
var b = [1,2,3,4,5];
console.log(chunk(b,3));
// cb2promise
var promisePost = cb2promise($.post);
promisePost('http://www.baidu.com');
console.log(promisePost);
</script>
</body>
</html>