关于导入js模块和函数作用域的问题(local/global)

Question about importing js module and function scope(local/global)

嗨,我是 js 新手,我正在尝试了解导入 js 模块时的 local/global 范围。

下面是我的 html/js 文件,它正在运行。

enter image description here

下面是我的 html/js 文件,该文件无法正常工作。

请告诉我为什么要放document.querySelector~~~ 以及为什么第二个不起作用..

您的 main.js 应该是:

import {make_black} from "/static/sub.js";

window.make_black = make_black;

当您使用脚本标签将外部脚本导入为模块时,模块代码为 运行 但无论如何都无法访问导出。您必须将它们显式添加到 window,如上例所示。然后您将能够在 html onclick 属性中访问 make_black。

如果您想从模块中导出一些东西,例如:

main.js

import {make_black} from "/static/sub.js";

export let mb = make_black;

然后在 main.html 中访问您的 mb 函数,您必须这样做:

main.html

<script type="module">
    import {mb} from "/static/main.js";
    // now you can use mb here, which is a reference to your make_black function
    // inside sub.js
</script>

如果您只是将外部脚本作为模块导入,则无法在其范围内访问其变量。您必须将它们导入带有 type="module" 的脚本标签内(如上所示),或者通过将它们分配给 js 文件内的 window 来明确使它们可用(也如上所示)。模块在浏览器中的工作方式有点令人困惑!