zoukankan      html  css  js  c++  java
  • xgqfrms™, xgqfrms® : xgqfrms's offical website of GitHub!

    js 深入原理讲解系列-currying function

    能看懂这一题你就掌握了 js 科里函数的核心原理

    不要专业的术语,说人话,讲明白!

    Q: 实现 sum 函数使得以下表达式的值正确

    const log = console.log;
    
    const sum = ???;
    
    sum(1, 2, 3).sumOf(); //6
    sum(2, 3)(2).sumOf(); //7
    sum(1)(2)(3)(4).sumOf(); //10
    sum(2)(4, 1)(2).sumOf(); //9
    
    

    A: 原型链

    // bug ❌
    function sum(...args) {
       let len = sum.length;
       // let args = arguments;
       return function curry (args) {
          if(args.length <= len) {
              return sum.apply(sum, ...args)
          } else {
              return function (...args2) {
                  curry.apply(sum, args.concat(...args2))
              }
          }
          this.sumOf = function() {
            return this.curry();
          } 
       }
    }
    
    // OK ✅
    const sum = (...args) => {
       const collectArgs = (...collectedArgs) => sum(...collectedArgs, ...args)
       collectArgs.sumOf = () => args.reduce((a, b) => a + b, 0);
       return collectArgs;
    }
    
    

    科里函数 / currying function

    高阶函数
    科里化
    原型链
    闭包
    closure

    refs



    ©xgqfrms 2012-2020

    www.cnblogs.com 发布文章使用:只允许注册用户才可以访问!


  • 相关阅读:
    表单校验神器
    插入排序
    数组去重的几种常使用的方式
    day44 mysql高级部分内容
    day43 多表查询和pymysql
    day42 字段的增删改查详细操作
    day41 mysql详细操作
    day40 mysql数据类型
    day39 mysql数据库基本操作
    day37 异步回调和协程
  • 原文地址:https://www.cnblogs.com/xgqfrms/p/14025942.html
Copyright © 2011-2022 走看看