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

原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 四年级数学差生怎么办 给学生讲错题了怎么办 高中作弊被通报怎么办 没收到电子发票怎么办 皇冠草叶子发黄怎么办 脚痒怎么办小窍门 孩子天天玩手机怎么办 征信大数据花了怎么办 衣服容易有水印怎么办? ps楷体有锯齿怎么办 报表打印需要jre怎么办 考试忘记写名字怎么办 ems明信片没收到怎么办 580escl解锁失败怎么办 留学回国人员证明怎么办 员工不签劳动合同怎么办 在日本怎么办韩国签证 在新疆怎么办英国签证 安徽省会考没过怎么办 初中要会考了怎么办 担保人卡被冻结怎么办 188a转永居失败怎么办 刷机忘了id密码怎么办 在澳大利亚怎么办白卡 外国的工作签证怎么办 北京去澳门怎么办签注 专科挂科毕业证怎么办 新西兰预科成绩不合格怎么办 私立转公立学籍怎么办 法国留学拒签怎么办 法国留学签证被拒怎么办 英国留学拒签怎么办 在普高出国怎么办 副高职称不让出国怎么办 没学位现场确认怎么办 香港master挂科怎么办 香港研究生挂科怎么办 加拿大研究生绩点刚合格怎么办 l2续签失败 学校怎么办 珍珠柏盆景黄叶怎么办 导师中途辞职了怎么办