'If'语句添加到全局变量

时间:2017-02-17 14:41:09

标签: javascript

我正在尝试根据用户已完成的任务数量计算出用户的总体百分比。在运行该函数时,我似乎无法更新全局变量。如果任务设置为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;
    }
}

提前感谢您提供任何帮助或建议。

2 个答案:

答案 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;