函数柯里化

76 阅读1分钟

Offer 驾到,掘友接招!我正在参与2022春招打卡活动,点击查看活动详情

ES系列文章

判断变量类型常用类型判断的方法:(4种)

inatanceof 判断谁是谁的实例 proto

typeof 不能判断对象类型

typeof {}
//object
typeof []
//object

constructoe 可以找到这个变量是通过谁构造出来的

[].constructoe
// Array() 
({}).constructoe
//object() 

Object.prototype.toString.call()

Object.prototype.toString.call()
// undefined
Object.prototype.toString.call('')
// String
Object.prototype.toString.call(1)
// number
function isType(value,type){
    return Object.prototype.toString.call(value) === '[object Number]'
}

isType([],'Array')

将方法细分 isType => isString isArray

function isType(type){
    return function(value){
         return Object.prototype.toString.call(value) === '[object Number]'
    }
}

let isArray = isType('Array')
console.log(isArray('hello'))
console.log(isArray([]))
//false
//true

将函数进行细分,这就是柯里化。意思就是将一个大的范围变成一个小的范围

实现通用的柯里化方法

function isType(type,value){
    return Object.prototype.toString.call(value) === '[object ${type}]'
}
const currying = (fn,arr = []) =>{
//查看函数参数长度
    let len = fn.lenght;
    
    return function(...args){
        let concatValue = [...arr,...args]
        if (a.lenght < len){
            return currying(fn,concatValue );//递归
        }else {
            return fn(...concatValue)
        }
    }
}
let isArray = currying(isType)('Array')
let isString = currying(isType)('String')
console.log(isArray([]))
console.log(isArray('string'))
console.log(isArray([]))
//可用在异步请求
//使用这个方法套上一个方法,举列子
function sum(a,b,c,d,e,f){
    return a+b+c+d+e+f
}
let r =currying(sum) (1,2)(3,4)(5)(6)
console.log

一个前端小白,若文章有错误内容,欢迎大佬指点讨论!