Javascript JS模块vs脚本加载顺序,Safari中的全局变量

Javascript JS模块vs脚本加载顺序,Safari中的全局变量,javascript,module,safari,global-variables,Javascript,Module,Safari,Global Variables,我一直在用Chrome和Firefox开发一个程序,但我注意到在Safari中加载时,控制台中会出现错误,表明某些变量不可用。 我在index.html中有几个模块脚本标记,而其余的是常规脚本标记 我的第一个问题是模块和脚本是否以未定义的顺序加载,这可能会导致部分问题 我注意到的第二件事: 在我的代码中,我在常规脚本中使用了一种老式样式的模式: const NAMESPACE = (function() { const out = {}; ... return out; }()); 在Chro

我一直在用Chrome和Firefox开发一个程序,但我注意到在Safari中加载时,控制台中会出现错误,表明某些变量不可用。 我在index.html中有几个模块脚本标记,而其余的是常规脚本标记

我的第一个问题是模块和脚本是否以未定义的顺序加载,这可能会导致部分问题

我注意到的第二件事: 在我的代码中,我在常规脚本中使用了一种老式样式的模式:

const NAMESPACE = (function() { const out = {}; ... return out; }());
在Chrome和Firefox中,这很好,但在Safari中,我需要这样做:

window.NAMESPACE = (function() { const out = {}; ... return out; }());
或者控制台在其他文件中报告一个错误,表示该变量未在其他文件中声明。全局作用域函数和类的情况也是如此

我的第二个问题是:为什么会这样?有办法解决这个问题吗?发生错误的原因可能只是因为我试图从模块中访问变量,而Safari的JavaScript引擎在从模块加载时不会将全局对象公开到全局范围?不知何故,我对此表示怀疑,因为即使两个非模块脚本试图访问全局范围对象,问题仍然存在

解决这个问题最简单的方法是什么?某些第三方脚本不能是模块。如果问题的一部分是加载顺序,如何确保在另一个脚本可用之前不会加载脚本?我的想法是使用动态导入