在线客服

JavaScript中的函数公式柯里化

adminadmin 报建百科 2024-04-25 140 17
JavaScript中的函数公式柯里化

1. 定义表明

函数公式柯里化(Currying)是一种将接纳好几个参数函数公式转化成一系列接纳单独参数函数技术性。这一概念是通过一位数学家Haskell Curry命名,这个人是形式逻辑、电子信息科学和数学领域的重要人物之一。

在JavaScript中,函数公式柯里化能通过将一个函数转化成一个接纳单独参数函数公式编码序列来达到。每一个函数公式都回到一个新函数,该函数公式接纳下一个主要参数,并最后一个函数中返回结果。

下边是一个典型的例子来阐述函数公式柯里化这个概念:

function add(a) {
  return function(b) {
    return a   b;
  };
}

// 应用柯里化函数公式
const add5 = add(5);
console.log(add5(3)); // 导出: 8

在后面的例子中,add 函数公式接纳一个主要参数 a,并回到一个匿名函数,该匿名函数接纳主要参数 b,并回到 a b 得到的结果。

根据启用 add(5),大家得到了一个新的函数公式 add5,该函数公式将 5 做为第一个主要参数。随后,大家启用 add5(3),它接纳主要参数 3,并返回结果 8。

根据函数公式柯里化,我们可以把接纳好几个参数函数公式转换成接纳单独参数函数公式编码序列,这可以比较方便地开展函数公式重复使用及部分运用。它也可以帮助我们建立更具有实用性与可组合性的函数公式,使编码更为模块化设计和易读性比较强。

需注意,JavaScript并不是单纯的面向对象编程语言表达,而函数公式柯里化只是一种技术性,可以根据实际情况在编码中应用。很多JavaScript库和架构,如lodash和Ramda,提供了方便的函数公式柯里化的一种手段函数公式来简单化研发流程。

2. 实际应用:Pinia软件(Vue软件也一样的基本原理)

下面,我再去给出一个实际应用在Vue3.0 Pinia工程中的函数公式柯里化的事例:

localStoragePlugin.ts↓

import { toRaw } from "vue"; // 引进toRaw
import { PiniaPluginContext } from "pinia"; // 引进pinia

type Options = {
  key?: string;
};

const __piniaKey__: string = "non_hana"; // 默认设置key值

// 界定存放当地区域的函数公式
const setStorage = (key: string, value: any) => {
  localStorage.setItem(key, JSON.stringify(value));
};

// 界定载入当地区域的函数公式
const getStorage = (key: string) => {
  return localStorage.getItem(key)
    ? JSON.parse(localStorage.getItem(key) as string)
    : {};
};

// 界定pinia软件函数公式
const piniaPlugin = (options: Options) => {
  // 这里return是函数公式科里变的书写,常常用以结构函数调用,其实就是主要参数特征提取
  // 当store.use(piniaPlugin())时,就会自动传到context,而我这里必须自定传到的options,因此需要回到一个函数来接受这一全自动传到的context
  // ps:写软件的时候特别常见!由于写软件时都会根据XXX.use那样的方式来引进软件,这样一般就会自动传到一些主要参数,我们应该自定传到参数值,就需要使用科里变的书写
  return (context: PiniaPluginContext) => {
    const { store } = context; // 将context结构出去
    // 启用getStorage载入存有当地的已经有数据信息
    const data = getStorage(`${options?.key ?? __piniaKey__}-${store.$id}`); // 载入当地区域的数据信息
    store.$subscribe(() => {
      console.log("changed");
      setStorage(
        `${options?.key ?? __piniaKey__}-${store.$id}`,
        toRaw(store.$state)
      );
    });
    // 传参遮盖pinia state里边的原始值
    return {
      ...data,
    };
  };
};

// 导出来pinia软件
export default piniaPlugin;

main.ts↓

import { createApp } from "vue";
import App from "./App.vue";
import { createPinia } from "pinia"; // 引进pinia
import piniaPlugin from "./store/localStoragePlugin"; // 引进自定的pinia软件

export const app = createApp(App);
app.use(ElementPlus);

// 用store接受createPinia()返回目标
const store = createPinia();
// 将piniaPlugin申请注册到store上
store.use(
  piniaPlugin({
    key: "pinia",
  })
);

// 将store初始化到app上,相当于一个软件
app.use(store);

app.mount("#app");

在这样一个例子中,我就是自身写了一个能够把Pinia里的值储存在当地的一个软件。当需在Pinia上边申请注册自己写的这一软件的时候要应用use这一api,并且当使用这一api时,pinia就会自动传到一个主要参数context: PiniaPluginContext,那么我们在这里期望自己界定一个传到参数值key,因而我们将全自动传到这个主要参数提到下边的return函数参数值内部结构,自身流传的主要参数写上原先的函数调用内部结构,这样将主要参数拆分成两部分,互不干涉。

本站是一个以CSS、JavaScript、Vue、HTML为中心的前端开发技术网址。我们的使命是为众多前端工程师者提供全方位、全方位、好用的前端工程师专业知识和技术服务。 在网站上,大家可以学到最新前端开发技术,掌握前端工程师最新发布的趋势和良好实践。大家提供大量实例教程和实例,让大家可以快速上手前端工程师的关键技术和程序。 本站还提供了一系列好用的工具软件,帮助你更高效地开展前端工程师工作中。公司提供的一种手段和软件都要经过精心策划和改进,能够帮助你节约时间精力,提高研发效率。 此外,本站还拥有一个有活力的小区,你可以在社区里与其它前端工程师者沟通交流技术性、交流经验、处理问题。我们坚信,街道的能量能够帮助你能够更好地进步与成长。 在网站上,大家可以寻找你需要的一切前端工程师网络资源,使您成为一名更加出色的网页开发者。欢迎你添加我们的大家庭,一起探索前端工程师的无限潜能!
代办报建

本公司承接江浙沪报建代办施工许可证。
联系人:张经理,18321657689(微信同号)。

喜欢0发布评论

17条评论

  • 游客 发表于 5个月前

    楼上的很有激情啊!http://aijiankang99.cn/news/17d399622.html

  • 游客 发表于 5个月前

    我就搞不明白了,看帖回帖能死人么,居然只有我这么认真的在回帖!http://kwpc.cqyiyou.net/test/398753414.html

  • 游客 发表于 5个月前

    很给力!http://lj1.sikao51.com

  • 游客 发表于 5个月前

    楼上的这是啥态度呢?http://www.8001tiyu.com

  • 游客 发表于 4个月前

    这个帖子好无聊啊!http://www.3553km.com

  • 游客 发表于 4个月前

    顶!顶!顶!http://www.3553km.com

  • 游客 发表于 4个月前

    内容很有深度!http://www.guangcexing.net/voddetail/TwJTpdpKYMVA.html

  • 指尖站群 发表于 3个月前

    终于看完了,很不错!http://www.nemuriyusurika.com/

发表评论

  • 昵称(必填)
  • 邮箱
  • 网址