八、return function与柯里化

javascript编入集

函数是一等公民,离不开柯里化[1]的表示形式。
常规的一个add:

function add(a,b){
    return a+b
 }

柯里化后的add

function addCurry(a){ 
    return function(b){
        return a + b;
    }
}

在调用上也是有很大区别。

add(1,2); // 3
addCurry(1)(2) // 3

乍一看,这个东西和脱裤子放屁没什么区别。怎么说呢,一步的操作分为了两步。
那我们换一个

function add(a) {
    return function(b) {
        if (b === undefined) {
            var result = a;
            return a=undefined,result;
        } else {
            return a+= b, arguments.callee
        }
    }
}
 add(1)(2)(3)(4)() // 10

arguments.callee

这个属性返回当前正在执行的函数
为什么不用this呢?还记得js中的this指向的是函数拥有者,而不是函数本身吗,所以这里的this并不是该函数本身。
实际上在严格模式下,这个arguments.callee是不允许存在的。
上面的函数改写为

function add(a) {
    return function curry(b) {
        if (b === undefined) {
            var result = a;
            return a=undefined,result;
        } else {
            return a+= b, curry
        }
    }
}
add(1)(2)(3)(4)() // 10

仇归仇,恨归恨,不同的表现形式都是为了处理相同的事情,所以在核实的场景下选择合适的方法,而不是以不变应万变,编程就要随机应变不是吗。
来看一个柯里化组合的操作

function Color(color) {
    return function() {
        return color
    }
}

function Size(size) {
    return function() {
        return size;
    }
}

function link(fn, fn2) {
    return function(arg) {
        return arg + fn() + fn2();
    }
}
var green  = Color("green");
var yellow = Color("yellow ");
var large = Size('large');
var small = Size("small");
var smallyellow = link(small ,yellow );
var yellowsmall = link(yellow ,small );
smallyellow(" car ");
yellowsmall(" bike ");

附赠优秀的柯里化库 :ramdalodash


  1. 将多个参数表示形式,变为单个参数表示形式。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 函数和对象 1、函数 1.1 函数概述 函数对于任何一门语言来说都是核心的概念。通过函数可以封装任意多条语句,而且...
    道无虚阅读 10,181评论 0 5
  • 原文链接 Haskell和scala都支持函数的柯里化,JavaScript函数的柯里化还与JavaScript的...
    dreamapple阅读 7,325评论 0 24
  • 第5章 引用类型(返回首页) 本章内容 使用对象 创建并操作数组 理解基本的JavaScript类型 使用基本类型...
    大学一百阅读 8,773评论 0 4
  • 我真的很感动,因了王清发了一篇文章给我,因了他对我的这份热情,因了他对教育的这份情怀。 异性相吸很...
    西风瘦水阅读 4,316评论 2 6
  • 声明处: UIImageView+Webcache.h 概述 整合UIImageView和SDWebImage进行...
    _阿南_阅读 4,394评论 0 1

友情链接更多精彩内容