• 函数柯里化


    // 什么叫高阶函数 : 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()
    
    //
  • 相关阅读:
    建立文件类型关联
    Delphi程序员,你们现在还好吗?
    加一文档到开始菜单中的文件夹下
    文本转换为GIF
    取消文件类型的关联
    取得任务栏的高度
    TeeChart使用范例
    同步SQL Server服务器时间
    注册系统热键
    山西襄汾溃坝事故已造成259人死亡
  • 原文地址:https://www.cnblogs.com/TTblog5/p/13054419.html
Copyright © 2020-2023  润新知