Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/434.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
函数式javascript,并为函数的每个实例创建唯一的存储_Javascript_Functional Programming_Scope - Fatal编程技术网

函数式javascript,并为函数的每个实例创建唯一的存储

函数式javascript,并为函数的每个实例创建唯一的存储,javascript,functional-programming,scope,Javascript,Functional Programming,Scope,所以我想知道是否有一种技术可以创建一个类似redux的自定义存储,并将其用于函数的多个实例。我目前的方法遇到了范围问题。主函数里面有很多函数,里面有很多函数,所以我不想通过多个函数传递存储,我只想把它导入函数中 问题显然在于范围。如果我创建控制器函数的多个实例,它们将共享相同的存储值,并且彼此之间不是唯一的。很明显,我可以在主函数内部创建存储并传递它,但是当您必须多次传递它时,这会变得很乏味 是否有某种技术允许我为控制器函数的每个实例创建一个唯一的存储,并能够导入它,而不是在主函数及其所有子函数

所以我想知道是否有一种技术可以创建一个类似redux的自定义存储,并将其用于函数的多个实例。我目前的方法遇到了范围问题。主函数里面有很多函数,里面有很多函数,所以我不想通过多个函数传递存储,我只想把它导入函数中

问题显然在于范围。如果我创建控制器函数的多个实例,它们将共享相同的存储值,并且彼此之间不是唯一的。很明显,我可以在主函数内部创建存储并传递它,但是当您必须多次传递它时,这会变得很乏味

是否有某种技术允许我为控制器函数的每个实例创建一个唯一的存储,并能够导入它,而不是在主函数及其所有子函数中传递它?现在我在想,我只是被困在通过商店的所有功能。是否有人知道一种技术,可以在范围内创建存储,并且仍然能够将其导入函数,而不必传递它

下面是一个非常简单的问题示例

controller.js

import store from "./store";

const controller = () => {
  
  // there will be many child functions here with many helper 
  // functions that would rely on the store values this is a simple example

  const setValue = (val) => store.dispatch({ type: "SET", payload: val });

  const getValue = () => store.get();

  return {
    getValue,
    setValue
  };
};

export default controller;
store.js

const createStore = (reducer, initialState) => {
  let state = initialState;

  const get = () => state;

  const dispatch = (action) => {
    state = reducer(action, state);
  };

  return {
    get,
    dispatch
  };
};

const reducer = (action, state) => {
  switch (action.type) {
    case "SET":
      return action.payload;
    default:
      return state;
  }
};

const initialState = 0;

const store = createStore(reducer, initialState);

export default store;

使用依赖注入

const controller = (store = createStore()) => {
你的问题不是范围问题。 一旦商店“存在”,它就在范围之内。
问题是你只需要创建一个存储。

我不确定你想要什么,但是类和方法是解决方案吗?@Barmar它是解决方案,但是你在传递存储时,对这个做同样的事情。我正试图通过拆分函数和导入必要的函数来简化代码的处理,使它们变得纯粹,但它通过类来实现,因为您基本上是将
绑定到所有内容和模块内部,因此不清楚
指的是什么面向对象的代码,跟踪
这个
成为第二天性。对于函数式编程,跟踪作用域也有同样的问题。类似于Store.js中的
export-const-Store=()=>createStore(reducer,0)
controller
主体中的
const-Store=Store()
?“…我真的想把它导入函数中。”你的意思是什么“将其导入函数”?
const controller = (store = createStore()) => {