JavaScript -- 函数柯里化
来源:互联网 发布:asp.net博客源码 编辑:程序博客网 时间:2024/06/06 07:22
基础知识
函数形参:可通过function.length得到形参个数
function A(a, b) {}// a跟b就是形参console.log(A.length); //2
函数实参:可通过arguments获得
function B(a, b) { console.log(arguments);}B(1,2,3); // 1,2,3
柯里化是什么:
sum(1,2,3); //6sum(1)(2,3); //6sum(1,2)(3); //6
相比于第一个函数,第二个和第三个就使用了函数的柯里化的思想:当sum函数得到了它期望的参数(3个)时,它就返回结果。要不然就返回一个新的函数(e.g. sum(1)跟sum(1,2))持续吃进新参数。
来自wiki的函数柯里化定义:是把接受多个参数的函数变换成接受一个单一参数(最初函数的第一个参数)的函数,并且返回接受余下的参数而且返回结果的新函数的技术。
柯里化实例
function curry(fn) { //暂时不考虑上下文this的情况 return function f(...args) { //传进来的参数个数不少于形参个数,调用并返回结果 if(args.length >= fn.length) { return fn.apply(this, args); } else { //传进来的参数个数少于形参个数,返回一个闭包 return function(...arr) { return f.apply(this, args.concat(arr)); } } }}let sumWithCurry = curry(sum);sumWithCurry(1,2,3); //6sumWithCurry(1)(2,3); //6sumWithCurry(1,2)(3); //6
使用bind实现柯里化
function sayHi(greeting, ending) { console.log(`My name is ${this.name}, ${greeting}. ${ending}!`);}//这里已经把greeting吃进去了let fn = sayHi.bind({name: 'mike'}, 'Love you'); fn('Thanks!'); // My name is mike, Love you. Thanks!!
原文链接:
https://github.com/n0ruSh/the-art-of-reading/issues/5
阅读全文
0 0
- JavaScript 函数的柯里化
- 柯里化函数之Javascript
- JavaScript-函数柯里化
- 【JavaScript 】函数柯里化
- 详解JavaScript函数柯里化
- JavaScript的柯里化函数
- JavaScript -- 函数柯里化
- JavaScript 的函数柯里化
- 函数-JavaScript 中的 函数 currying 柯里化
- Javascript偏函数与柯里化
- JavaScript之函数绑定与函数柯里化(高级函数)
- javascript函数
- Javascript函数
- Javascript函数
- javascript函数
- javascript函数
- javascript函数
- JavaScript函数
- 浅谈HTTP中Get、Post、Put与Delete的区别
- Java实现-将整数A转换为B
- Spring AOP
- 数组按照对象属性排序
- Python3中raw_input() was renamed to input()
- JavaScript -- 函数柯里化
- Python 环境下下载并安装NLTK说明
- java多线程之进程和线程
- 【android x86 5.1】system/core/目录下README翻译
- Android中部分修改字体和全局修改字体的方法
- 解决WebSocket 服务器 The WebSocket session [0] has been closed and no method...异常信息
- BZOJ3620 似乎在梦中见过的样子
- ARKit & OpenGL ES
- 可以输入也可以下拉选择的select