全局变量在require文件中未定义

时间:2016-08-04 13:16:32

标签: javascript global-variables undefined global

错误:"未定义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;

3 个答案:

答案 0 :(得分:0)

那是因为节点模块是在一个函数中执行的(我认为是require函数)所以constletvar变量的范围是该函数但是global.TILE_SIZE = 64;将放在全球范围内。

答案 1 :(得分:0)

我认为答案是在require()函数实现中。 如果您使用TILE_SIZEvarlet定义const,则其范围为app.js文件,而不是global对象。 因此,在World.js内,您无法访问app.js的范围。

答案 2 :(得分:0)

您的app.jsWorld.js是不同上下文的一部分,也就是闭包。 TILE_SIZE变量只能在app.js

内访问

您需要明确地将TILE_SIZE变量作为参数传递给World的构造函数。

Learn More about Closures here