Измените значение глобальной переменной с помощью функции из 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;
}

1 ответ

Решение

Вы не можете передавать значения по ссылке в javascript, он думает, что вы просто пытаетесь использовать значение переменных. Для этого вам нужно будет использовать указатели, которые недоступны в таких языках, как javascript. Чтобы добиться этого с помощью вашего текущего метода, вам нужно будет создать глобальную переменную для каждой ссылки и устанавливать их каждый раз с помощью другой функции. (Вам понадобится отдельная функция для каждой переменной, и в качестве аргумента будет использоваться только значение 'value'; для переменной будет присвоено соответствующее значение, переданное функции 'addTo '). Однако этот метод кажется ненужным и крайне неэффективным. Просто установите их вручную в своем коде, это не повредит; Вот так:

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

... вместо использования отдельной функции для каждой ссылки, которая, честно говоря, вообще не нужна, ни в вашем случае, ни в целом. Вы также можете вернуть новое значение в функцию и использовать его, но снова; совсем не обязательно.

Другие вопросы по тегам