当我在控制台或数组中调用它时函数未定义,但在另一个函数中工作?

Function is undefined when I call on it in the console or an array, but works within another function?

所以我在 JavaScript 中编写了一个程序,其中数组中的几个值取决于函数的结果。此函数也在代码的其他地方使用,并且在那里工作正常。

代码看起来像这样:

var Multiplier; 
$("#button").on("click", function() { foo(); });

function foo() {
    x = document.getElementById("select").value;
    setMultiplier(x);
    setName(x);
    $("#select").hide();
    $("#page").show();
}
function setMultiplier(q) {
    if (q === "Option 1") {
        Multiplier = 1;
        return Multiplier;
    } else if (q === "Option 2") {
        Multiplier = 100;
        return Multiplier;
    }
}
function mult(base) {
    var z;
    z = base * Multiplier;
    return z;
}

据我所知,我遇到的问题与 setName() 无关,因为该功能工作正常。此外,Multiplier 在其他地方也有适当的价值。但是,当它在程序后面找到的数组中使用时,它给出了 undefined 的值,当我将它输入控制台时,它也显示 Multiplier is not defined。同样的事情发生在数组和控制台中的 mult() 函数上,但它在其他地方工作正常。我在这里遗漏了什么吗?

编辑: 所以在程序的后面, mult(base) 在两种类型的上下文中被调用: 1. 在一个函数(有效)中,如下所示:

function blah() {
    var s = "<div>$" + mult(75) + "</div>";
    s += "<div>$" + mult(150) + "</div>";
    document.getElementById("mydiv").innerHTML = s;
}

2。在像这样的数组(不起作用)中:

var array = [["String1", mult(60), 0, [mult(2), mult(5)], mult(30)], 
["String2", mult(100), 0, [mult(10), mult(25)], mult(50)]];

你可以,而且你是。

问题是您在声明 properties 时仅使用 mult() 调用初始化 properties 一次。 TemplateName 仅在有人点击 UI 后初始化: 初始化之前它的值是 null,这对数字不友好.

JS 不会神奇地返回并重新初始化 properties,或重新 运行 mult 每次访问它的值时:当您声明 properties 并在声明 properties 时使用 mult returns 设置所有这些值。