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 发布文章使用:只允许注册用户才可以访问!


  • 相关阅读:
    NumPy:数组计算
    Matplotlib模块:绘图和可视化
    量化投资与Python
    vue-cli脚手架(框架)
    vue 之webpack打包工具的使用
    vue之node.js的简单介绍
    es6简单介绍
    ECMAScript 6 入门
    爬虫框架之Scrapy
    angular5使用httpclient时解决跨域问题
  • 原文地址:https://www.cnblogs.com/xgqfrms/p/14025942.html
Copyright © 2011-2022 走看看