Javascript会产生不良输出

时间:2015-02-20 08:35:06

标签: javascript

我基本上是从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-score: 6

但实际输出是

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

为什么M-score为0?

6 个答案:

答案 0 :(得分:4)

那是因为getMScore初始化为零,并且永远不会改变。

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

答案 1 :(得分:3)

这是因为getScore是一个函数,并且在您调用它时它将获得teamScore的实际结果。但是getMScore只是在返回之前设置的简单静态值。请注意getMScore不是某种"快捷方式"或"指针"到teamScore,它只是简单的价值。

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

getMScore : function() { return teamScore; }

并将其称为:

alert ("What is the M-score  :" + myObject.getMScore())

答案 2 :(得分:2)

当你的团队得分最初为0时,myObject中你所指的getMScore已被分配给0,

因此,即使您更改了teamscore的值,它仍会返回在更改teamscore值之前返回的值

答案 3 :(得分:2)

getMScore已使用0

初始化

因为当您定义objectteamScore等于0getMScore : teamScore也会得到0并不重要,您之后会更改它。< / p>

答案 4 :(得分:2)

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

另一方面,getMScore被分配到teamScore的初始值(为0)并保持不变。 希望它有意义。

答案 5 :(得分:1)

定义对象时,您设置的是teamScore = 0,然后是getMScore : teamScore。换句话说,teamScore将用于初始化getMScore

请注意,“值”是关键字 - 此代码未将引用分配给teamScore变量,它实际上只是复制当前价值从一个到另一个。 <{1}}如果getMScore有效,teamScore将不会改变,因为这两个值是独立的。