使用内部函数更改全局变量值 window.onload

Change global variable value with a function from inside window.onload

我正在构建一个计算器。为什么 addToStr 函数无法更改全局变量的值? (我只是抽取了一些 switch 语句案例来缩短代码)。

window.onload = function () {

$(".buttons").click(function () {
    var id = $(this).attr("id");

    switch (id) {
        case "b-7":
            value = "7";
            console.log(value);
            addToStr(miniDisplayString, value);
            addToStr(numberString, value);
            break;
        case "b-8":
            value = "8";
            addToStr(miniDisplayString, value);
            addToStr(numberString, value);
            break;
        case "b-9":
            value = "9";
            addToStr(miniDisplayString, value);
            addToStr(numberString, value);
            break;
        case "b-divide":
            value = " / ";
            addToStr(miniDisplayString, value);
            break;
    }

    console.log("total = " + total);
    console.log("miniDisplayString = " + miniDisplayString);
    console.log("numberString = " + numberString);
});
}


var total = 0;
var value;
var miniDisplayString = "";
var numberString = "";


function addToStr(tot, val) {
     tot += val;
}

您不能在 javascript 中通过 reference 传递值,它认为您只是在尝试使用变量的 value .为此,您需要使用 指针在 javascript 等语言中不可用。为了使用您当前的方法实现此目的,您需要为 每个引用 创建一个 全局变量 ,并每次使用不同的 function.(每个变量需要一个单独的函数,并且只将 'value' 作为参数;并将变量设置为传递给函数的相应值 'addTo<varName>').然而,这种方法似乎是不必要的,而且非常低效。只需在您的代码中手动设置它们,根本不会造成伤害;像这样:

testStr += val; // This should not be nested inside a function like addToStr.

... 而不是为每个引用使用单独的函数,老实说,这根本没有必要,无论是在您的情况下还是在一般情况下。 您还可以 return 函数中的新值并再次使用它;根本没有必要。