【问题标题】:"can't access lexical declaration 'players' before initialization"“在初始化之前无法访问词法声明‘玩家’”
【发布时间】:2021-02-09 21:39:29
【问题描述】:

我在我的 javascript 项目中使用模块。 我在网上搜索了这个问题,但在模块的上下文中找不到这个问题的解决方案。

这是我的代码:

(main.js):

         "use strict";
         export let players = 1;
         import { string1 } from "./cube.js";

(cube.js):

         "use strict";
         import { players } from "./main.js";
         export let string1 = "text 1234";
         console.log(players);   // error: can't access lexical declaration 'players' before initialization

我认为既然变量“players”是从“main.js”导入的,它应该是可以访问的。我可能对一些显而易见的事情视而不见,但不知道是什么?

谁能指点我这个问题的答案或解决方案,谢谢!!

【问题讨论】:

  • 顺便说一句,删除那些 "use strict"; 序言。无论如何,所有模块代码都是严格的。

标签: javascript variables scope es6-modules circular-dependency


【解决方案1】:

你在这里有循环导入。您从main.js 导入cube.js,反之亦然。 所以cube.js不能导入players,因为main.js已经导入了cube.js。 你可以查看文档https://nodejs.org/api/modules.html#modules_cycles

【讨论】:

    【解决方案2】:

    删除 main.js 中的 import { string1 } from "./cube.js";。这样,你就有了一个循环导入,当开始加载 main.js 时,它会强制 cube.jsmain.js 之前被评估em> 已经运行并初始化了变量players - 它仍然处于临时死区。如果您稍后访问它,它会起作用。

    【讨论】:

      猜你喜欢
      • 2021-09-30
      • 2020-09-24
      • 2020-06-29
      • 2020-11-18
      • 1970-01-01
      • 1970-01-01
      • 2021-04-09
      • 2020-12-29
      • 2021-09-10
      相关资源
      最近更新 更多