手写实现

作者: 别过经年 | 来源:发表于2019-05-10 11:30 被阅读0次
  1. 柯里化 curry

参考lodash 4.17.11 API 实现

  • 使用bind拼接参数
function curry(fn) {
  const { length } = fn;

  return function next() {
    if (length === arguments.length) {
      return fn.apply(this, arguments);
    } else if (arguments.length < length) {
      return next.bind(this, ...arguments);
    }
  };
}

function abc(a, b, c) {
  return [a, b, c];
}

const curried = curry(abc);

console.info(curried(1)(2)(3)); //[1,2,3]
console.info(curried(1, 2)(3)); //[1,2,3]
console.info(curried(1, 2, 3)); //[1,2,3]
  • 使用闭包将变量保存在curry函数中的container变量
function curry(fn) {
  const { length } = fn;
  let container = [];
  return function next() {
    const args = Array.prototype.slice.call(arguments);
    container = container.concat(args);
    if (length === container.length) {
      const ret = fn.apply(this, container);
      container = [];// 此处需要将保存参数的容器清空,连续调用curried函数,container参数不断增加
      return ret;
    } else if (container.length < length) {
      return next;
    }
  };
}

function abc(a, b, c) {
  return [a, b, c];
}

const curried = curry(abc);

console.info(curried(1)(2)(3)); //[1,2,3]
console.info(curried(1, 2)(3)); //[1,2,3]
console.info(curried(1, 2, 3)); //[1,2,3]

相关文章

  • Glide框架手写实现(四)磁盘缓存

    Glide框架手写实现(一)资源封装Glide框架手写实现(二)活动缓存Glide框架手写实现(三)内存缓存Gli...

  • 前端经典手写笔试题

    一 请手写拖拽实现 二 请手写es6和es5的面向对象代码实现 三 请手写tab选项卡 四 请手写ajax的get...

  • 面试秘籍之手写系列

    一、手写call函数 二、手写bind函数 三、手写实现new功能的函数 四、手写reduce函数 五、手写防抖函...

  • 神经网络与机器学习,tensorflow,学习计划 目录

    1.感知机 2.python实现感知机 3.实现mnist手写字识别 4.多层感知机实现mnist手写字识别,准确...

  • 基于XML注入的Spring手写实现笔记

    Spring手写实现笔记 本篇文章并不是教你如何基于XML注解实现Spring,仅仅是本人手写实现Spring X...

  • 搜狗面试

    原型链上手写事件,手写原生js实现ajax事件,jsonp实现原理,阻止事件IE冒泡代码,事件捕获、处理,冒泡代码...

  • 快速排序

    手写java版快速排序算法实现

  • 手写call、apply、bind函数

    本文章用于个人笔记-内容参考于掘金 先看一下call、apply、bind的应用 手写实现-call -手写实现-...

  • 技能

    C++ C++特性 C++11 多态和继承 构造函数 析构函数 手写代码实现string类 手写代码实现智能指针 ...

  • 手写KNN实践

    手写代码是算法最好的实现机制:

网友评论

    本文标题:手写实现

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