当前位置: 首页 > news >正文

柯里化/偏函数/Curring用法

把接受多个参数的函数变成一个单一参数的函数,并且返回接受余下的参数而有返回结果的新函数的技术

下面我们以实例说明:

var toString = {}.toString;

var isString = function(obj) {
    return toString.call(obj) === '[object String]';
};

var isFunction = function(obj) {
    return toString.call(obj) === '[object Function]';
};
...

在JavaScript中进行类型判断时,我们通常会进行类似上述代码的方法定义。这段代码虽然不复杂,但是需要重复去定义一些相似的函数,如果有更多的isXXX(),就会出现更多的冗余代码。我们可以做一些改进

var isType = function(type, obj) {
    return toString.call(obj) === '[object ' + type + ']';
};

提取不确定因素,用同一个函数代替。但是这样的type是可以枚举出来的值,会造成不必要的犯错和冗余,且语义不清晰。如果我们引入一个新函数,可以如工厂一样批量创建一些类似的函数。

var isType = function(type) {
    return function(obj) {
        return toString.call(obj) === '[object ' + type + ']';
    };
};

var isString = isType('String');
var isFunction = isType('Function');

我们通过isType()函数预先指定type的值,然后返回一个新函数。这样创建类型判断函数就简单多了

参考:深入浅出Node.js

转载于:https://www.cnblogs.com/mackxu/p/curring.html

相关文章:

  • 兄弟连区块链教程区块链背后的信息安全2DES、3DES加密算法原理二
  • [leetcode]_Symmetric Tree
  • Python使用Xpath轻松爬虫(脑残式)
  • 在实验静态块等时遇到到关于main函数的问题
  • 解读微软开源MMLSpark:统一的大规模机器学习生态系统
  • DAX2012 R3安装
  • GIS中栅格数据结构的显示与计算
  • ORM::联表查询
  • Flume学习之路 (二)Flume的Source类型
  • 【struts2】Struts2的系统架构
  • STM32中用 stop 模式 配合低功耗模式下的自动唤醒(AWU) 能否实现FreeRTOS tickless 模式...
  • ECMAScript中所有的函数的参数都是按值传递的
  • 《快学 Go 语言》第 3 课 —— 分支与循环
  • spark中的动态executor分配
  • zeroclipboard无法正常使用的解决办法
  • JavaScript-如何实现克隆(clone)函数
  • 【刷算法】求1+2+3+...+n
  • 2017-08-04 前端日报
  • C语言笔记(第一章:C语言编程)
  • java2019面试题北京
  • Objective-C 中关联引用的概念
  • puppeteer stop redirect 的正确姿势及 net::ERR_FAILED 的解决
  • python 装饰器(一)
  • uni-app项目数字滚动
  • Vue2.x学习三:事件处理生命周期钩子
  • Vue官网教程学习过程中值得记录的一些事情
  • 编写高质量JavaScript代码之并发
  • 不用申请服务号就可以开发微信支付/支付宝/QQ钱包支付!附:直接可用的代码+demo...
  • 大主子表关联的性能优化方法
  • 警报:线上事故之CountDownLatch的威力
  • 通信类
  • elasticsearch-head插件安装
  • ​linux启动进程的方式
  • !!java web学习笔记(一到五)
  • # 手柄编程_北通阿修罗3动手评:一款兼具功能、操控性的电竞手柄
  • #HarmonyOS:软件安装window和mac预览Hello World
  • (70min)字节暑假实习二面(已挂)
  • (第一天)包装对象、作用域、创建对象
  • (附源码)springboot青少年公共卫生教育平台 毕业设计 643214
  • (附源码)计算机毕业设计SSM疫情下的学生出入管理系统
  • (已更新)关于Visual Studio 2019安装时VS installer无法下载文件,进度条为0,显示网络有问题的解决办法
  • (原创)攻击方式学习之(4) - 拒绝服务(DOS/DDOS/DRDOS)
  • (转)EXC_BREAKPOINT僵尸错误
  • (转)Oracle 9i 数据库设计指引全集(1)
  • (转)原始图像数据和PDF中的图像数据
  • .net core 客户端缓存、服务器端响应缓存、服务器内存缓存
  • .net core使用ef 6
  • .net 桌面开发 运行一阵子就自动关闭_聊城旋转门家用价格大约是多少,全自动旋转门,期待合作...
  • .NET/C# 中设置当发生某个特定异常时进入断点(不借助 Visual Studio 的纯代码实现)
  • .NET3.5下用Lambda简化跨线程访问窗体控件,避免繁复的delegate,Invoke(转)
  • .netcore 如何获取系统中所有session_如何把百度推广中获取的线索(基木鱼,电话,百度商桥等)同步到企业微信或者企业CRM等企业营销系统中...
  • .net反编译的九款神器
  • /etc/shadow字段详解
  • @data注解_SpringBoot 使用WebSocket打造在线聊天室(基于注解)
  • [ Linux ] git工具的基本使用(仓库的构建,提交)