我正在尝试根据用户已完成的任务数量计算出用户的总体百分比。在运行该函数时,我似乎无法更新全局变量。如果任务设置为true,我希望它为变量添加一个,或者如果为false则减去一个。
每次单击待办事项列表中的项目时,函数AOAClass1();
都会运行。
var userProgress = 0;
console.log("Users Progress: " + userProgress);
//Detect task class change
function AOAClass1() {
var user = firebase.auth().currentUser;
var uid;
if (user != null) {
uid = user.uid;
}
if ($('#AOATask1').hasClass('checked')) {
//Set Task To false
var Ref = firebase.database().ref("Users/" + uid + '/Tasks');
Ref.child("AreasOfActivity").update({
userTask1: false,
});
var orginal = userProgress;
var userProgress = orginal - 1;
} else {
//Set Task To true
var Ref = firebase.database().ref("Users/" + uid + '/Tasks');
Ref.child("AreasOfActivity").update({
userTask1: true,
});
var orginal = userProgress;
var userProgress = orginal + 1;
}
}
提前感谢您提供任何帮助或建议。
答案 0 :(得分:2)
访问时不得写var
。编写var会在函数范围内创建一个新变量。
在第22和35行删除var
var userProgress = orginal - 1;
到
userProgress = orginal - 1;
答案 1 :(得分:2)
问题是您使用var
关键字重新定义变量:
var orginal = userProgress;
var userProgress = orginal - 1;
省略它,它将使用全局的:
userProgress -= 1;
另一方面,那是主要的代码重复。你可以重构:
var taskChecked = $('#AOATask1').hasClass('checked');
var Ref = firebase.database().ref("Users/" + uid + '/Tasks');
Ref.child("AreasOfActivity").update({
userTask1: !taskChecked,
});
userProgress = taskChecked ? userProgress - 1 : userProgress + 1;