函數柯里化,反柯里化
判斷變量的類型
常用的判斷類型的方法有四種:
1.typeof 不能判斷對象類型
2.constructor 可以找到這個變量是通過誰構造出來的
3.instanceos 判斷誰是誰的實例 _proto_
4.Object.prototype.toString.call() 缺陷不能區分誰是誰的實例
寫個方法判斷類型
function isType(type, value) {
return Object.prototype.toString.call(value) === `[object ${type}]`
}
console.log(isType([], 'Array')
能不能把方法進行細化,=> isString isArray
function isType(type) {
return function (value) {
Object.prototype.toString.call(value) === `[object ${type}]`
}
}
let isArray = isType('Array');
isArray('hello');
通過一個柯里化函數,實現通用的柯里化方法
const currying = (fn, arr = []) => {
let len = fn.length; // 這裏獲取的是函數的參數的個數
return function (..args) {
arr = [...arr, ...args];
if(arr.length < len) {
return curring(fn, arr); // 遞歸不停的產生函數
} else {
return fn(...arr);
}
}
}
let isArray = curring(isType)('Array');
console.log(isArray([]));
例sum(a, b, c, d, e, f){ return a+b+c+d+e+f }
let r = curring(sum)(1,2)(3,4)(5)(6)