美文网首页
js链式函数的实现:()()()

js链式函数的实现:()()()

作者: 不得不爱XIN | 来源:发表于2019-05-29 19:49 被阅读0次

先看一个问题

有一个函数 multiply可以无限调用,如:multiply(1,2)(4)(1,2)(),求所有数的合。

分析:涉及到的点:柯里化callee

CODE

var multiply = (function () {  
  let sum = 0;
    return function() {  
        var arr = [].slice.call(arguments); 
        if(arr.length <=0) {
          return sum;
        }else {
          arr.forEach(item => sum+=item)
        }
        
        return arguments.callee;  //callee:正被执行的Function对象。
    }
})();  


var test = multiply(1,2)(4)(1,2)();  
console.log(test);

思路解析

  1. 首先一个函数可以无限次调用,需要 return 一个 function 。这个函数需要做的操作是计算和并且当无入参时返回结果。此时就需要通过返回函数本身来实现无限调用,返回函数本身可以通过return arguments.callee或者return 函数名这两种方法。
  2. 入参不限并且统一处理就涉及到的是一个柯理化的概念。

柯里化: 是把接受多个参数的函数变换成接受一个单一参数(最初函数的第一个参数)的函数,并且返回接受余下的参数而且返回结果的新函数的技术。其实,柯里化就是用闭包原理实现函数参数的合并,然后再运行函数。

[].slice.call(arguments) 把伪数组转化返回一个正常的Array. 然后通过闭包实现sum的累加。

链式函数

对于上面的问题如果没有最后的(),该怎么写呢。

var multiply = function () {
  var sum = 0;
  var _args = [].slice.call(arguments);
  _args.forEach(item => {
    sum += item;
  });

  function s() {
    var args = [].slice.call(arguments);
    args.forEach(item => {
      sum += item;
    });
    return s
  }

  s.toString = function() {
    return sum + '';
  }
  s.valueof = function () {
    return sum;
  }
  return s;
};

var test = multiply(1, 2)(4)(1, 2);
console.log(test1);

解释: multiply函数内部返回一个s函数,修改了期toString和valueof方法,目的是为了在进行类型转化时返回值。

相关文章

  • js链式函数的实现:()()()

    先看一个问题 有一个函数 multiply可以无限调用,如:multiply(1,2)(4)(1,2)(),求所有...

  • 自制jquery-第一篇

    1, jquery.js脚本文件 2,实现链式调用的原理 非链式调用:$xxx.addClass("active"...

  • iOS链式编程及函数式编程

    提到链式编程和函数式编程,最典型的代表是Masonry 比较完美的实现了函数式编程和链式编程。例如 ``` [vi...

  • 实现函数链式计算

    今天在codewars上做题时发现一道很不错的题目,写下来分享。The goal is to implement ...

  • JS链式加法实现

    方法一 方法二 方法三 方法四 方法五 继承、闭包、递归、柯里化 相关文章 JavaScript链式调用 add(...

  • JavaScript 中的链式调用

    最近在看 jQuery 的源码,正好看到异步队列 Deferred 的实现,联想到链式调用的实现。 实现 在 JS...

  • PHP 三种方式实现链式操作

    在php中有很多字符串函数,例如要先过滤字符串收尾的空格,再求出其长度,一般的写法是: 如果要实现类似js中的链式...

  • 函数链式思想实现 UIView 属性设置

    函数链式就是函数式加链式,具体什么是函数式,什么是链式,大家可以网上去查,这里只作简单说明。 函数式形如:A = ...

  • 模拟异步函数

    异步函数实现机制(async.js) 实现了支持同步函数和异步函数的声明 声明异步函数 调用异步函数

  • 建立JS库文件

    建立库的方式 函数式 对象式 函数式 对象式 给JS添加连缀(链式)操作 给Base对象添加原型方法 1.添加CS...

网友评论

      本文标题:js链式函数的实现:()()()

      本文链接:https://www.haomeiwen.com/subject/pisutctx.html