zoukankan      html  css  js  c++  java
  • 实现fn(1,2)(3)(4).getSum(),使得最后输出值为实参的和即10

    方法1,使用闭包

    let arr = []
    
    function fn(){
      let arg = [...arguments]   // 用另一个变量表示外部函数的实参
      function closure(){        // 使用闭包将变量持久化
        arr = [...arr,...arg]
      }
      closure()
      return fn                  // 将函数自身return出去,这是实现链式调用的关键
    }
    
    Function.prototype.getSum = function(){   // 再函数原型上添加getSum方法
      let num = arr.reduce((prev,curt) => {
         return prev + curt
      },0)
      return num
    }
    
    let res = fn(1,2)(3)(4).getSum()
    console.log(res)    // 10
    

    方法2,使用arguments和对象的可扩展性原理

    • js中万物皆对象,函数也使对象,也具有可扩展性
    function fn(){
      arguments.callee.arr = [...arguments.callee.arr,...arguments]    // 拼接数组(实参)
      return fn
    }
    
    fn.arr = []    // 函数扩展参数arr
    
    fn.getSum = function(){  // 函数扩展方法getSum
      let num = this.arr.reduce((prev,curt) => {
        return prev + curt
      },0)
      return num
    }
    
    let res = fn(1,2)(3)(4).getSum()
    console.log(res)   // 10
    
  • 相关阅读:
    开源项目记录
    Linux的磁盘分区(一)
    Linux下的用户权限
    HeapSort 堆排序
    git参考手册
    SGU 分类
    20130704
    七月三日

    20130629
  • 原文地址:https://www.cnblogs.com/zoo-x/p/14863968.html
Copyright © 2011-2022 走看看