gpt4 book ai didi

javascript - 如何避免将 JavaScript ES6 模块导出添加到全局范围以用于普通脚本 block ?

转载 作者:行者123 更新时间:2023-11-30 20:10:15 25 4
gpt4 key购买 nike

到目前为止,我已经设法避免了硬核 JavaScript 编程,但看起来这种情况即将结束。在为一个重大的新项目做准备时,我试图了解 2018 年的最佳实践。我已经阅读了很多关于不同模块方法的文章,并使用了一些类似 Dojo 的基于 AMD 的模块。在思考如何设计自己的模块架构时,似乎 ES6 是进行新开发的正确途径。到目前为止,我理解了导入/导出语法,并获得了一些简单的模块来工作。但我目前使用 HTML 加载模块并使用它们的技术“感觉不对”。让我总结一下我目前所做的工作。

模块 foo.js

import (bar} from '/Scripts/bar.js'

export function foo() {
bar();
console.log("I'm in foo");
}

模块 bar.js

export function bar() {
console.log("I'm in bar");
}

index.html

<head>
<script type="module">
import {foo} from "/Scripts/foo.js"
window.foo = foo; // save for later but "feels wrong"
</script>
</head>

<body>
<script>
// foo(); // doesn't work - foo by itself is only defined in the module scope
window.foo(); // unless "stashed" somewhere else
</script>
</body>

也许这是正确的技术(我发现了 an older question that did basically the same as me ),但我仍然觉得我不应该像这样污染全局命名空间。假设这很糟糕,我还应该做什么?

最佳答案

如果您希望该函数在全局范围内可用,唯一的实现方法是将它放在全局范围内(又名 window 对象)。

但是,将事物置于全局范围内的一种更好的方法是使用某种包含所有全局变量的 globals 对象,而不是将函数/属性名称直接放在window 对象,它可能会导致与其他第三方库发生冲突。

所以你会说 globals.foo() 而不是 window.foo()

关于javascript - 如何避免将 JavaScript ES6 模块导出添加到全局范围以用于普通脚本 block ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52483411/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com