我正在编写一个具有类似于真实计算器的用户界面的计算器程序。一切都进行得很好(对于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);
})
在此先感谢您的帮助。非常感谢!我希望我的代码不会太乱。
答案 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 :(
}
}