错误:"未定义TILE_SIZE"。在World class的构造函数中。
当我尝试使用时:
global.TILE_SIZE = 64;
它可以工作,但是当用var,let或const声明它时,它是未定义的。为什么会这样?
app.js:
const TILE_SIZE = 64;
let WORLDS = [];
...
let World = require("./World");
...
function init() {
WORLDS[0] = new World(0, [...]);
}
...
init();
World.js:
class World {
constructor(id, boundmap) {
this.id = id;
this.boundmap = boundmap;
this.width = boundmap[0].length * TILE_SIZE;
this.height = boundmap.length * TILE_SIZE;
}
...
}
module.exports = World;
答案 0 :(得分:0)
那是因为节点模块是在一个函数中执行的(我认为是require
函数)所以const
,let
和var
变量的范围是该函数但是global.TILE_SIZE = 64;
将放在全球范围内。
答案 1 :(得分:0)
我认为答案是在require()
函数实现中。
如果您使用TILE_SIZE
,var
或let
定义const
,则其范围为app.js
文件,而不是global
对象。
因此,在World.js
内,您无法访问app.js
的范围。
答案 2 :(得分:0)
您的app.js
和World.js
是不同上下文的一部分,也就是闭包。 TILE_SIZE
变量只能在app.js
。
您需要明确地将TILE_SIZE
变量作为参数传递给World
的构造函数。