繁体   English   中英

ES6模块-全局变量

[英]ES6 Modules - Global Variables

我试图基于localStorage创建一个快速的发布订阅系统。 这个过程使我意识到我对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语句仅在首次导入时仅执行一次文件。

谢谢。

这是我的疏忽。

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

当忽略大小写时,还有另一个同名模块。 在具有其他区分大小写的文件系统上编译时,这可能导致意外行为。 如果需要多个模块,请重命名模块;如果需要一个模块,请使用相同的大小写。

这导致模块重新初始化。

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

谢谢。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM