Javascript:如何在不同的.js文件中传递全局变量/常量变量



所以我有一个像这样写的index.html:

// index.html:
<body>
<script>
const GAME_WIDTH = 800;
const GAME_HEIGHT = 600;
</script>
<script type="module" src="src/index.js"></script>
</body>

我想修改.js文件中的变量(下面的代码是我的尝试,它不起作用(,但不在index.html文件中,这可能吗?

// index.js: (this is my attempt, but failed)
import "../index.html";
GAME_WIDTH -= 100;
GAME_HEIGHT -= 100;

(有两个文件,index.html和index.js,其中index.js被放在一个名为"src"的文件夹中(

您可以直接在窗口对象上定义,如

window.GAME_WIDTH = 800;
window.GAME_HEIGHT = 600;

并像window.GAME_WIDTH -= 100;一样直接在index.js中使用它,如果您正在设置这些全局级别,则无需导入任何内容。

这里有两个错误:导入语句和重新分配给常量。

您甚至不会遇到第二个错误,因为来自.js文件内部的import行的错误将阻止该文件中的其余脚本执行。你不能导入这样的html文件。更重要的是,要访问另一个.js文件中的html文件的内联脚本,您根本不必导入html文件,因为它们已经是全局的,所以您可以访问它们,即使您没有像window.y = 1window.f = (x) => x * x那样将它们附加到window,除非它们在块或函数块中。

因此:

首先,删除.js文件中的导入行以消除导入错误。

然后,在内联脚本中,即html文件script标记中的变量中设置常量,因为常数consts是常量,不能重新分配。您可以通过将varlet放在它们的定义中而不是const来实现这一点。或者,您可以选择根本不将其中任何一个放在它们的定义中,除非它们位于(对于let(或函数内(对于放置varlet(。当您选择用letvar定义函数时,关注的部分是JavaScript语言中的范围,不在本文的范围内。

console.log('before :', GAME_WIDTH, GAME_HEIGHT);
GAME_WIDTH -= 100;
GAME_HEIGHT -= 100;
console.log('after: ', GAME_WIDTH, GAME_HEIGHT);
<html>
<body>
<script>
GAME_WIDTH = 800; // Or define with var or let unless inside a block to reach it in other script files
GAME_HEIGHT = 600; // Or define with var or let unless inside a block to reach it in other script files
</script>
<script type="module" src="index.js"></script>
<p>app</p>
</body>
</html>

最新更新