返回语句不更改全局范围内的变量

时间:2019-07-18 02:33:50

标签: javascript function return

我正在编写一个具有类似于真实计算器的用户界面的计算器程序。一切都进行得很好(对于xD而言,这对我来说是不寻常的),直到我需要从一个函数返回多个值为止(我在另一篇文章中读到,这可以使用数组来完成)。我没有将值返回到任何特定的位置,因此我认为它们只是被发送到全局范围,并且到目前为止,它已与updateDisplay()之类的其他函数一起使用。但是,当我尝试从returnValue返回operationClick()时,它不会将更改发送到函数之外。

下面是我的代码的一些片段(希望如此,您可以发现我在做错什么):

returnValue = [false, undefined];
numberArray = new Array;

function operationClick(operation, concat, returnValue) {
    if (operation == "equals") {
        concatComplete = returnValue[1] + concat;
        $('.screen_text').html(Number(concatComplete));
    }
    else if (operation == "add") {
        returnValue = [true, concat + "+"];
        console.log(returnValue); // The new value is correct here but not anywhere else :(
    }
    return returnValue; // Something goes wrong here!
}

function updateDisplay(array) {
    concat = array.join("");
    $('.screen_text').html(concat);
    return concat
}

function numberClick(number, returnValue) {
    if (returnValue[0] == true) {
        // This should run once operationClick() else if statement runs but it doesn't
        numberArray = new Array;
        $('.screen_text').html("");
    }
    numberArray.push(number);
    updateDisplay(numberArray);
    return numberArray;
}

$('.button_1').click(function(){
    numberClick(1, returnValue);
});

$('.button_addition').click(function(){
    operationClick("add", concat);
})

$('.button_equals').click(function(){
    operationClick("equals", concat, returnValue);
})

在此先感谢您的帮助。非常感谢!我希望我的代码不会太乱。

1 个答案:

答案 0 :(得分:0)

如注释中所述,返回值不会自动更新任何内容,您需要在调用方中对返回的值执行某些操作。如果您想用新值替换returnValue全局变量,请使用赋值进行操作。

$('.button_addition').click(function(){
    returnValue = operationClick("add", concat);
});

operationClick()函数本身不会发生这种情况,因为它已经声明了名为returnValue的局部变量(函数参数自动成为局部变量),并且这遮盖了全局变量。您也可以简单地通过给函数参数指定其他名称来解决问题。

function operationClick(operation, concat, oldReturnValue) {
    if (operation == "equals") {
        concatComplete = oldReturnValue[1] + concat;
        $('.screen_text').html(Number(concatComplete));
    }
    else if (operation == "add") {
        returnValue = [true, concat + "+"];
        console.log(returnValue); // The new value is correct here but not anywhere else :(
    }
}