柯里化
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<script>
// 已知 fn 为一个预定义函数, 实现函数 curryIt, 调用之后满足如下条件:
// 1、 返回一个函数 a, a 的 length 属性值为 1( 即显式声明 a 接收一个参数)
// 2、 调用 a 之后, 返回一个函数 b, b 的 length 属性值为 1
// 3、 调用 b 之后, 返回一个函数 c, c 的 length 属性值为 1
// 4、 调用 c 之后, 返回的结果与调用 fn 的返回值一致
// 5、 fn 的参数依次为函数 a, b, c 的调用参数
function curryIt(fn) {
return a = function(x) {
return b = function(y) {
return c = function(z) {
return fn.call(this, x, y, z);
}
}
}
}
var fn = function(a, b, c) {
return a + b + c
};
var res = curryIt(fn)(1)(2)(3);
console.log(res);
</script>
</body>
</html>
运行结果: