JavaScript柯里化与部分应用

本文详细介绍了JavaScript中的函数柯里化原理、实现及其应用,以及引用类型与基本类型的区别,帮助开发者理解高级编程概念,提升编程能力。
摘要由CSDN通过智能技术生成

🧑‍🎓 个人主页:《爱蹦跶的大A阿》

🔥当前正在更新专栏:《VUE》 、《JavaScript保姆级教程》《krpano》《krpano中文文档》

​ 

目录

✨ 前言

✨ 正文

一、函数柯里化(Currying)

什么是柯里化

柯里化实现

柯里化实例

部分应用

部分应用实现

部分应用示例

总结

二、JavaScript中的引用类型

基本类型和引用类型

对象是引用类型

赋值拷贝引用

对比基本类型

引用类型的比较

传递函数参数

总结

✨ 结语


 

✨ 前言

        JavaScript作为一门非常灵活的语言,包含许多高级功能来帮助开发者更好地编写代码。柯里化和引用类型就是其中两个重要且实用的高级概念。

        本文将详细介绍柯里化的用法,以及JavaScript中的值类型和引用类型的区别。这些都是每一位JavaScript开发者都需要深刻理解的知识点。

        通过学习本文,你将能够熟练使用柯里化技术提高函数的灵活性,并明确理解JavaScript中的值与引用的区别。这将大大提升你的JavaScript编程能力。

✨ 正文

一、函数柯里化(Currying)

什么是柯里化

        柯里化(Currying)是把接收多个参数的函数转换成接收一个单一参数的函数,并且返回接收余下的参数且返回结果的新函数的技术。

柯里化实现

我们可以编写一个 curry 函数来实现柯里化:

function curry(func) {

  return function curried(...args) {
    if (args.length >= func.length) {
      return func.apply(this, args);
    } else {
      return function(...args2) {
        return curried.apply(this, args.concat(args2));
      }
    }
  };

}

        这个 curry 函数将多参数函数转换成单参数函数,每次接收参数直至满足函数长度要求时终止柯里化并执行函数。

柯里化实例

使用柯里化可以对参数进行预设:

function sum(a, b, c) {
  return a + b + c;
}

let curriedSum = curry(sum);

curriedSum(1)(2)(3); // 6
curriedSum(1, 2)(3); // 6

部分应用

与柯里化相似,部分应用(Partial Application)是固定一个函数的部分参数来生成一个新的函数的技术。

部分应用实现

function partial(func, ...presetArgs) {
  return function(...laterArgs) { 
    return func(...presetArgs, ...laterArgs);
  }
}

partial 接收预设参数,返回带预设参数的新函数。

部分应用示例

let partialSum = partial(sum, 1, 2);

partialSum(3); // 6
partialSum(4); // 7

固定了部分参数,获得带参数的sum函数。

总结

  • 柯里化将多参数函数转换为单参数函数
  • 部分应用固定函数的部分参数
  • 都允许参数的预设应用
  • 提高了函数适用性

柯里化和部分应用都是函数式编程中非常重要的概念。

二、JavaScript中的引用类型

基本类型和引用类型

JavaScript 中有基本类型和引用类型两种类型。

基本类型直接存储值,引用类型的值是对象,存储对象的引用(内存地址)。

对象是引用类型

在 JavaScript 中,对象属于引用类型:

let obj = {
  name: "John"  
};

obj 变量并不直接存储对象,而是存储该对象的引用。

赋值拷贝引用

对一个引用类型进行赋值时,赋的值是该对象的引用:

let obj2 = obj;

obj2.name = "Pete";

alert(obj.name); // Pete

这里 obj2 和 obj 引用的是同一个对象。

对比基本类型

和基本类型不同,对引用类型进行赋值时拷贝的是对象的引用,而不是值:

let str = "Hello";
let str2 = str; 

str2 = "Bye"; // str unchanged

基本类型不会被引用。

引用类型的比较

引用类型不能使用 == == 比较,需要通过 Object.is 比较引用。

或者可以比较特定的属性。

传递函数参数

将对象作为参数传递给函数时,同样只是传递了对象引用而不是对象本身。

总结

  • 对象属于引用类型,保存对象的引用
  • 赋值和传参都会复制引用,多个变量引用同一对象
  • 引用类型不能比较,需要比较对象属性或用 Object.is
  • 理解的值与引用的区别非常重要

这是学习 JavaScript 的重要概念之一。

 

✨ 结语

        希望通过本文,这两个重要的JavaScript高级概念不再难以理解。将它们运用到项目中,可以让我们的代码更加易于维护和扩展。

        持续学习JavaScript的核心理念,是成为资深JavaScript开发者不可或缺的素养。这将使我们的代码更加规范,健壮而优雅。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

爱蹦跶的大A阿

你的打赏就是我蹦跶的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值