Javascript产生不需要的输出

Javascript产生不需要的输出,javascript,Javascript,我基本上来自java背景,所以我编写了一个JavaScript代码,其中一个变量充当私有变量,下面是我的代码 var myObject = function(){ var teamScore = 0; return { playSix: function() { teamScore += 6 }, playFour: function() { teamScore = teamSc

我基本上来自java背景,所以我编写了一个JavaScript代码,其中一个变量充当私有变量,下面是我的代码

var myObject = function(){
    var teamScore = 0;  
    return {
        playSix: function() {
            teamScore += 6
        },

        playFour: function() {
            teamScore = teamScore +4
        },

        getScore: function(){
            return teamScore;
        },

        getMScore : teamScore
    }
}();



 myObject.playSix();

alert ("What is the team score  :" + myObject.getScore())
alert ("What is the M-score  :" + myObject.getMScore)
期望输出为

球队得分:6分; M分数是多少:6分

但实际产出是

球队得分:6分; M分数是多少:0


为什么M-score为0?

当teamscore最初为0时,您在myObject中引用的getMScore已被指定为0

因此,即使您更改teamscore的值,它仍将返回在更改teamscore的值之前返回的值。定义对象时,您将teamscore设置为0,然后获取mscore:teamscore。换句话说,teamScore的值将用于初始化getMScore

请注意,value是这里的关键词-此代码并没有为teamScore变量指定引用,它只是将当前值从一个复制到另一个。如果teamScore更改,则getMScore不会更改,因为这两个值是独立的。

这是因为getMScore初始化为零,并且从不更改

属性getMScore不是对teamScore变量的引用,它仅在创建对象时使用teamScore变量的值进行初始化。更改teamScore变量时,getMScore属性不受影响。

之所以会发生这种情况,是因为getScore是一个函数,它将在您调用它的所有时间获得teamScore的实际结果。但getMScore只是返回之前设置的简单静态值。请注意,getMScore不是指向teamScore的某种快捷方式或指针,它只是一个简单的值

要解决此问题,应将getMScore编写为函数,例如:

getMScore : function() { return teamScore; }
这样称呼它:

alert ("What is the M-score  :" + myObject.getMScore())
getMScore已用0初始化


因为当您定义对象时,teamScore等于0,getMScore:teamScore也会得到一个0,不管您以后是否更改它。

如果仔细观察,getScore是一个函数,调用它时返回teamScore的当前值。 所以,当你调用myObject.playSix时;teamScore将变为6。 现在调用getScore将返回teamScore=6的当前值

另一方面,getMScore被分配给teamScore的初始值,该值为0,并且保持不变。
希望有意义。

谢谢,这么简单的事情,明白了: