所以我有一个像这样写的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 = 1
、window.f = (x) => x * x
那样将它们附加到window
,除非它们在块或函数块中。
因此:
首先,删除.js文件中的导入行以消除导入错误。
然后,在内联脚本中,即html文件script
标记中的变量中设置常量,因为常数const
s是常量,不能重新分配。您可以通过将var
或let
放在它们的定义中而不是const
来实现这一点。或者,您可以选择根本不将其中任何一个放在它们的定义中,除非它们位于块(对于let
(或函数内(对于放置var
或let
(。当您选择用let
或var
定义块和函数时,关注的部分是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>