美文网首页
利用 bind 实现柯里化

利用 bind 实现柯里化

作者: wfatec | 来源:发表于2019-08-08 17:35 被阅读0次

首先引用wiki上对柯里化的解释:柯里化(英语:Currying),是把接受多个参数的函数变换成接受一个单一参数(最初函数的第一个参数)的函数,并且返回接受余下的参数而且返回结果的新函数的技术

而平时我们在使用bind方法时,更多的是用来绑定函数的上下文,或者说用来绑定this。那么柯里化和bind有什么关系呢?

首先我们来看一下mdn上对bind的语法描述:

function.bind(thisArg[, arg1[, arg2[, ...]]])

  • thisArg:这个我们很熟悉,用于绑定this

  • arg1, arg2, ...:在函数调用时,依次传入的参数

显然arg1, arg2, ...就是实现柯里化的关键!

举个例子(来自mdn):

function list() {
  return Array.prototype.slice.call(arguments);
}

function addArguments(arg1, arg2) {
    return arg1 + arg2
}

var list1 = list(1, 2, 3); // [1, 2, 3]

var result1 = addArguments(1, 2); // 3

// Create a function with a preset leading argument
var leadingThirtysevenList = list.bind(null, 37);

// Create a function with a preset first argument.
var addThirtySeven = addArguments.bind(null, 37); 

var list2 = leadingThirtysevenList(); 
// [37]

var list3 = leadingThirtysevenList(1, 2, 3); 
// [37, 1, 2, 3]

var result2 = addThirtySeven(5); 
// 37 + 5 = 42 

var result3 = addThirtySeven(5, 10);
// 37 + 5 = 42 , second argument is ignored

从上述例子可以看出,leadingThirtysevenListaddThirtySeven都实现了柯里化的效果,我们在编写代码时,活用bind的这一特性,可以让我们的代码更加优雅

相关文章

  • 利用 bind 实现柯里化

    首先引用wiki上对柯里化的解释:柯里化(英语:Currying),是把接受多个参数的函数变换成接受一个单一参数(...

  • 手写简单.bind()实现

    手写一个实现柯里化的.bind() 柯里化:《函数柯里化小结》柯里化:前端开发者进阶之函数柯里化Currying ...

  • 函数的call/apply/bind方法

    bind 方法属于ES5才提供的方法,在IE9及以上才支持 利用bind实现柯里化 bind与new上面我们可以知...

  • JS模拟实现bind,call,apply

    call apply bind 简单实现 函数柯里化的实现 构造函数的实现 ES6实现 结合实现

  • 手写实现bind、call、apply

    bind 和其他两个方法作用也是一致的,只是该方法会返回一个函数。并且我们可以通过 bind 实现柯里化。函数柯里...

  • 手写实现

    柯里化 curry 参考lodash 4.17.11 API 实现 使用bind拼接参数 使用闭包将变量保存在cu...

  • 前端JS面试手写函数

    1.用一个柯里化函数实现累加 2.实现一个bind函数 3.实现一个new函数

  • js 高级技巧

    惰性载入函数 函数绑定 bind函数简单实现(还有更高级的封装,这里不多做介绍,只写最核心的几句) 函数柯里化//...

  • 函数绑定与函数柯里化

    用于创建已经设置好了一个或者多个参数的函数。创建柯里化函数的通用方式: 柯里化构造更为复杂的bind()函数:

  • JS bind/currying 柯里化

    函数扩展bind方法 在ES5开始使用的,也就是ie9一下不支持;函数扩展bind使用如下:function() ...

网友评论

      本文标题:利用 bind 实现柯里化

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