• 函数柯里化常见应用---add(1,2) add(1)(2) add(1)(2)(3) add(1,2,3)(4)


    这是一道经典的题目,先上代码:

    解法1:

    function add () {
      var args = Array.prototype.slice.call(arguments);
    
      var fn = function () {
        var sub_arg = Array.prototype.slice.call(arguments);
       // 把全部的参数聚集到参数的入口为一个参数: args.concat(sub_arg) return add.apply(null, args.concat(sub_arg)); } fn.valueOf = function () { return args.reduce(function(a, b) { return a + b; }) } return fn; } console.log(add(1,2)) // 3 console.log(add(1)(2)) // 3 console.log(add(1)(2)(3)) // 6 console.log(add(1,2,3)(4)) // 10

    解法2:

        function add () {
          var args = Array.prototype.slice.call(arguments);
    
          var fn = function () {
         // 把参数都放在一个相当于全局变量的 args 里面  args.push(...arguments) return fn; } fn.valueOf = function () { return args.reduce(function(a, b) { return a + b; }) } return fn; } console.log(add(1,2)) // 3 console.log(add(1)(2)) // 3 console.log(add(1)(2)(3)) // 6 console.log(add(1,2,3)(4)) // 10

    解题的关键技术点如下

    一. 函数柯里化

     柯里化定义:

          是把接受多个参数的函数变换成接受一个单一参数的函数,并且返回接受余下的参数而且返回结果是新函数的技术。

    对定义的解释:

     对比下平常的函数,都是返回一个结果(具体的值),而柯里化的函数是可以接收多个参数比如 "(1)(2)",并且返回的是一个新的函数(比如代码里的 fn ),而且这个新函数接收剩下的参数。

    二. 自定义修改 valueOf 方法

    valueOf简单来说,就是在console.log(add(1))的时候,会自动调用valueOf方法,我们把它重写了, 调用的时候,就把 args 这个数组求和返回就是最终结果了。

    valueOf的具体讲解看这里 https://blog.csdn.net/dapangzi88/article/details/61197937#   讲的很好。

    参考: https://www.jianshu.com/p/2975c25e4d71      https://blog.csdn.net/dapangzi88/article/details/61197937#

  • 相关阅读:
    c++的输入流基础知识
    用英文加优先级来解读C的声明
    django 用imagefiled访问图片
    关于Django中的表单验证
    c#语言的一些复习
    IIS发布的网站用localhost可以访问,改成IP就无法访问的解决方案 .
    首次关于IIS配置遇到的一些问题
    常见dos操作
    vs2012中对于entity framework的使用
    几个知识点
  • 原文地址:https://www.cnblogs.com/yalong/p/10864594.html
Copyright © 2020-2023  润新知