有没有办法访问JavaScript中尚未定义的变量?

时间:2019-11-21 11:42:53

标签: javascript generator p5.js

你好!

除了在p5.js中,我正在尝试制作一个BlackThornProd频道上的地下城生成程序。我有一个生成其他房间的生成器函数,我将所有房间都作为函数,并且我有4个数组来存储不同的房间。我的问题是,我必须访问spawner函数中的数组,但是spawner函数必须在room函数之上,而room函数必须在数组之上。像这样:

var spawner = function(x, y, value) {
    switch(value) {
        case 1:
            topRooms[random(0, topRooms.length)](x, y);
            break;
        case 2:
            bottomRooms[random(0, bottomRooms.length)](x, y);
            break;
        case 3:
            leftRooms[random(0, leftRooms.length)](x, y);
            break;
        case 4:
            rightRooms[random(0, rightRooms.length)](x, y);
            break;
    }
};

var start = function(x, y) {
    pushMatrix();
    translate(x, y);
    rect(-25, -25, 20, 1); //Top Left
    rect(25, -25, -20, 1); //Top Right
    rect(25, 25, -20, 1); //Bottom Right
    rect(-25, 25, 20, 1); //Bottom Left
    rect(25, -25, 1, 20); //Right Top
    rect(25, 25, 1, -20); //Right Bottom
    rect(-25, 25, 1, -20); //Left Bottom
    rect(-25, -25, 1, 20); //Left Top
    popMatrix();
};

var topRooms = [];
var bottomRooms = [];
var leftRooms = [];
var rightRooms = [];

如您所见,必须从阵列上方的生成器访问阵列。我不知道是否有一种方法可以访问代码下面的内容,但是我使用的环境不喜欢它。

如果您知道解决方案,请回复。谢谢!

1 个答案:

答案 0 :(得分:4)

使用 var 关键字声明的数组会被提升 ,因此即使您稍后声明它们,它们也将始终移至脚本顶部。

如果您的代码不完整(我看不到数组的填充位置),则可能是您尝试在其中调用函数时遇到的问题。

可以通过在调用该函数之前进行简单的检查来解决此问题:

case 1:
  topRooms[random(0, topRooms.length)] && topRooms[random(0, topRooms.length)](x, y);
  break;