【问题标题】:Are variables in script type = "module" "invisible"?脚本类型=“模块”“不可见”中的变量?
【发布时间】:2019-09-17 04:27:48
【问题描述】:

假设我有以下代码:

//myjs.js
let testingVisibility = "hello";
<script type = "module" src = "myjs.js"></script>

当我想在 Firefox 中通过控制台访问testingVisibility 变量时,testingVisibility 变量没有被声明。

【问题讨论】:

  • 如果你export它,它应该可用。
  • @Derek 我明白了。所以就是这样。 script type = "module" 中的所有变量和函数都不可用,除非导出并导入到另一个特定脚本,对吗?而且由于导入脚本还必须附加type = "module",所以我永远无法通过我的控制台访问所述变量吗?
  • 你也可以把它导出到全局空间,比如window.testingVisibility = testingVisibility,这样就有点像全局了。
  • 每个模块都有自己的作用域。
  • @FelixKling 我明白了!所以基本上,一个模块有点创建自己的类似函数的范围,这意味着varlet 声明的任何变量都不能在所述模块之外访问。这些变量通常无法在所述类似函数的范围之外访问(如果我们谈论的是函数,获取它们的值的唯一方法就是返回它们)。但是,使用模块,我们可以通过使用导出和导入轻松地提供对其他模块的可访问性(类似函数的范围)。谢谢你的回答。

标签: javascript html object ecmascript-6 module


【解决方案1】:

因为您还没有导出它们 - 导出是 type="module" 的重点。只需使用普通脚本:

<script src="myjs"></script>

如果你想使用type="module",那么从myjs导出一些东西:

export let testingVisibility = "hello";

然后在你的 HTML 中;

<script type="module">
    import { testingVisibility } from "./myjs";
    //Do stuff with testingVisibility
</script>

【讨论】:

  • 这意味着我将无法通过浏览器的控制台访问模块中的变量,对吧?
  • @RichardW 对,只要你没有明确地将它们分配给window
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-01-03
  • 2018-01-18
  • 1970-01-01
  • 2011-09-22
  • 2014-10-25
  • 2019-10-10
相关资源
最近更新 更多