ES6模块 - 全局变量

时间:2016-11-23 14:59:36

标签: javascript

我正在尝试使用localStorage创建一个快速的pub-sub系统。这个过程让我意识到我对ES6模块如何工作的理解是不完整的。

const subscribers = {};
export default {
  subscribe (key, callback) {
    if (!Array.isArray(subscribers[key])) {
      subscribers[key] = [callback];
    } else {
      subscribers[key] = [...subscribers[key], callback];
    }
  },
  publish (key, value) {
    window.localStorage[key] = value;
    subscribers[key].forEach(cb => cb(value));
  }
};

每当我想订阅/发布到localStorage中的密钥时,我就导入了这个模块。问题是每次导入模块时都会重新初始化订阅者对象。

有没有办法在不污染窗口的情况下保留订阅者对象?我假设import语句仅在第一次导入时才执行一次文件。

感谢。

1 个答案:

答案 0 :(得分:1)

这是对我的疏忽。

导入此模块时我输错了(大小写),我指定了错误的文件名。

  

当忽略大小写时,还有另一个具有相同名称的模块。这个   在使用时编译文件系统时会导致意外行为   其他案例语义。如果需要多个模块,则重命名模块   如果需要一个模块,请使用相等的套管。

这导致模块重新初始化。

如果我错了,请纠正我,但我相信一个模块只会在第一次导入时对整个应用程序执行一次。

感谢。