闭包与函数柯里化

闭包

要理解闭包,首要知道什么是自由变量。
自由变量就是,在函数中使用的变量。但它既不是函数的参数,也不是函数的局部变量。闭包笼统的说:就是能访问到自由变量的函数

在js中,闭包存在的意义就是让我们可以间接访问函数内部的变量

柯里化

柯里化,就是把接受多个参数的函数变换成一个接受单一参数(或部分)的函数,并且返回接受余下的参数而且返回结果的新函数的技术

编写一个add函数,使其add(1,2)或add(1)(2)的结果都是3
//单独实现第一种
function add(a, b) {
    return a + b
}
//单独实现第二种
function add(a) {
    return function (b) {
        return a + b
    }// 其实这里就是一个闭包,内部函数调用了自由变量b
}
//两种皆可以实现
function add(a, b) {
    return arguments.length > 1 ? (b) => a + b : a + b
}

一个完美的柯里化函数

function add () {
    let args = [...arguments];//把arguments类数组模式参数转换成数组
    let fun = function () {
        let newArgs = args.concat([...arguments]);//利用闭包,合并arguments参数
        return add.apply(null, newArgs)
        
    }
    
    //求和a + b
    fun.toString = function() {
        return args.reduce((a, b) => a + b)
    }
    return fun
}

柯里化常见的作用

  1. 参数复用,对部分参数的复用,无需重复添加。
  2. 提前返回,提前返回可以返回的返回值并可以继续进行参数的接受。
  3. 延迟计算,累计传入的参数,最终返回计算结果
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值