首页 > 其他 > 详细

函数柯里化

时间:2020-06-06 16:13:39      阅读:38      评论:0      收藏:0      [点我收藏+]
// 什么叫高阶函数 : 1.如果一个函数的参数是一个函数 (回调函数也是一个高阶函数)
// 2.如果一个函数返回一个函数 这个函数就叫高阶函数
// 闭包

// 1) 判断类型 1) typeof 无法辨别对象类型 2) constructor 谁构造出来的
// 3) instanceof 判断谁是谁的实例 __proto__
// 4) Object.prototype.toString.call  缺陷就是不能细分是谁谁的实例 
function isType(type){
    // 将string保存在了这个代码块中
    return function (content) {
        // 为了改变this指向
        return Object.prototype.toString.call(content) === `[object ${type}]`
    }
}
// 高阶函数实现了第一个功能 保存变量 (闭包)
// let isString = isType(‘String‘);
// // 什么叫闭包:在定义的时候 函数就决定了 一个函数不在自己的所在作用域下执行
// isString(‘hello‘);
// let isNumber = isType(‘Number‘);
// isNumber(123); // bind方法
// console.log(isType(‘hello‘,‘String‘))
// console.log(isType(123,‘Number‘))
let util = {};
[‘String‘,‘Number‘].forEach((type)=>{
    util[‘is‘+type] = isType(type);
});
console.log(util.isString(123))

//函数柯里化通用实现
const currying = (fn,arr=[])=>{
    let len = fn.length
    return function(...args){
        arr = [...arr,...args]
        if(arr.length < len){
            return currying(fn,arr)
        }else{
            return fn(...arr)
        }
    }
}

// 作业
// 函数的柯里化 函数的反柯里化(扩大函数的范围)
// 1) 柯里化
// function isType(type,content){

// }
// let isString = currying(isType,‘String‘)
// isString(‘hello‘)

// 2) 反柯里化
// Object.prototype.toString => toString()

//

 

函数柯里化

原文:https://www.cnblogs.com/TTblog5/p/13054419.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!