在 Javascript 中设置全局数组的值不起作用

Setting value for global array in Javascript doesn't work

我正在尝试根据函数调用的指定 options/values 通过函数调用设置全局变量。这是我的代码:

    let g_Pl = [];

    function prepare() {
        let s = 0;

            s = 1;
            g_Pl[s] = 5;

            s = 2;
            g_Pl[s] = 8;

            s = 3;
            g_Pl[s] = 10;
        }

    function getInfo(s,map,pl) {
        switch (map) {
            case "test":
                pl = g_Pl[s];
            break;
        }
    }

function test() {
    let local_Pl;

    getInfo(1, "test", local_Pl)

    console.log(local_Pl);
}

prepare();
test();

但是控制台输出是 "undefined",我想知道为什么? local_Pl 应该根据 prepare() 中的参数从 getInfo 中设置一个值,该值必须为“5”:

s = 1;
g_Pl[s] = 5;

为什么不起作用?

您正在使用 pllocal_Pl 作为 out 参数,也就是 pass by reference 参数或 ByRef,但 JavaScript 没有支持该功能。您应该改为 return 结果,如下所示:

function getInfo(s, map) {
    switch (map) {
        case "test":
            return g_Pl[s];
    }
}

function test() {
    let local_Pl = getInfo(1, "test");
    console.log(local_Pl);
}

如果您需要 return 某些东西并且还有一个输出参数,那么您可以创建一个对象来包含这两个对象和 return 该对象。

function getInfo(s, map) {
    var element;
    switch (map) {
        case "test":
            element = g_Pl[s];
            break;
    }
    return { found: !!element, pl: element };
}

function test() {
    let result = getInfo(1, "test");
    if (result.found) console.log(result.pl);
}