【问题标题】:Is there a way to access variables that weren't defined yet in JavaScript?有没有办法访问 JavaScript 中尚未定义的变量?
【发布时间】:2019-11-21 11:42:53
【问题描述】:

你好!

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

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 = [];

如您所见,必须从位于数组上方的生成器访问数组。我不知道有没有办法访问代码下面的东西,但是我使用的环境不喜欢它。

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

【问题讨论】:

    标签: javascript generator p5.js


    【解决方案1】:

    使用 var 关键字声明的数组是 hoisted 所以即使你稍后声明它们,它们仍然会被移动到脚本的顶部。

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

    这可以通过在调用函数之前进行简单检查来解决:

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

    【讨论】:

    • 我在 KhanAcademy 编辑器中对此进行了测试(可能不是最好的地方 =D),它给了我这个错误:“'topRooms' 在定义之前就被使用了。”其他每个数组也存在匹配错误。也许它只在 KhanAcademy 编辑器中?
    • 也许这是一个 linter 问题,因为提升 var 是事实
    • 数组包含函数?
    猜你喜欢
    • 2022-07-13
    • 2017-12-10
    • 2023-03-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-02
    • 2023-02-21
    相关资源
    最近更新 更多