如何从 JS 中的 window 对象访问和分配函数?

How to access and assign function from a window object in JS?

我曾尝试将函数分配给 window 对象,例如 main.js

var _init_ = function(id = "") {
    //do something
}
window._init_ = _init_;

现在我尝试通过附加这样的脚本从 index.html 调用函数:

<script type="module" src="./main.js"></script>
<script type = "text/javascript">
    _init_();
</script>

但是当我刷新浏览器时它给了我 Uncaught ReferenceError: _init_ is not defined 尽管当我尝试通过浏览器控制台中的 window._init_ 访问它时它返回了函数。

注意: 我将脚本作为 module 导入,因为我将 js 代码分解为不同的 js 文件并将其作为一个文件使用

Question/doubt:如何分配和访问 window 对象中存在的函数,将 id 保持为可选,这意味着如果 id 未在函数调用中传递,它将为空string 或者如果传递了 id 它将接受传递的字符串。

模块 运行 异步。 _init_ 未在您的内联脚本 运行 时定义。

虽然有一些方法可以让内联脚本在模块加载后从模块中获取信息,但不会那么优雅。到目前为止最好的方法是:

Now I tried calling the function from index.html

作为入口点本身:

<script type="module">
import { init } from './main.js';
init(); // pass an ID here if you want
</script>
// main.js
export const init = function(id = '') {
  // do something
}

一种通过动态加载实现此目的的方法。

function loadScript() {
  const script = document.createElement('script');
  script.src = "./main.js";
  document.body.appendChild(script);

  return new Promise((res, rej) => {
     script.onload = function() {
      res();
   }
 });
}


loadScript()
 .then(() => {
  console.log('loaded, now you can use what ever you need from main.js');
});

另一种是使用onLoad事件:

<script onload="callInit();" type="module" src="./main.js"></script>