为什么我使用 ES 模块时浏览器控制台中没有变量?

Why are variables not available in the browser console when I use ES modules?

我很好奇为什么当我将脚本类型设置为 type="module".

时我无法访问浏览器控制台中定义的变量

下面是一个假设的设置:

<!DOCTYPE html>
<html>
<head>
  <div id="containerFirst">...</div>
  <div id="differentContainer">...</div>
</head>

<body>
  ...
</body>
<script type="module" src="module.js"></script>
<script src="normal.js"></script>
</html>

这是两个 JS 文件,第一个 module.js:

export const firstContainer = document.getElementById('containerFirst');

和normal.js中类似的变量结构:

const otherContainer = document.getElementById('differentContainer');

当我在浏览器中 运行 时,我可以直接在控制台中输入 normal.js 中定义的变量,但不能访问 module.js 中定义的变量。我希望在这个问题上找到一些清晰度。 谢谢!

如果您在相关模块代码的断点处暂停,您将能够访问模块变量,但如果不是,则不能。按照设计,模块中的顶级声明不是全局声明。每个模块都有自己的范围,有点像它们是一个只被调用一次的函数(这是一个 粗略的 类比),所以顶层声明对模块的范围是私有的(除非你导出它们,当然)。