Javascript 这是范围问题还是函数创建问题?

Javascript 这是范围问题还是函数创建问题?,javascript,Javascript,我已经好几年没有使用Javascript了,我正在努力重新使用它。我只想创建一对随机数,并将它们相加。我还想练习使用“getVariable()”来保护对原始变量的操作,同时使整个脚本都可以访问它们。我一定是记错了,否则我真的做了件蠢事。我一直收到一条消息,getScore1未定义。我试着把它写成函数getScore1()和this.getScore1=function(){}。有人能给我指一下正确的方向吗 function twoRandomScores(){ var score1 =

我已经好几年没有使用Javascript了,我正在努力重新使用它。我只想创建一对随机数,并将它们相加。我还想练习使用“getVariable()”来保护对原始变量的操作,同时使整个脚本都可以访问它们。我一定是记错了,否则我真的做了件蠢事。我一直收到一条消息,getScore1未定义。我试着把它写成函数getScore1()和this.getScore1=function(){}。有人能给我指一下正确的方向吗

function twoRandomScores(){
    var score1 = Math.random(1, 10);
    var score2 = Math.random(1, 10);
    return score1 + score2;
    this.getScore1 = function(){
            return this.score1;
        }
    function getScore2(){
            return this.score2;
        }
}

document.write(getScore1() + '+' + getScore2() + '=' + twoRandomScores());

确定你的代码是正确的吗?在分配getScore1之前,您将退出函数,因此不会分配给getScore1和getScore2。因此,未定义的错误

确定您的代码正确吗?在分配getScore1之前,您将退出函数,因此不会分配给getScore1和getScore2。因此,未定义的错误

getScore函数是在
twoRandomScores()
函数中定义的,因此它们不能简单地从函数外部访问。您现在编写的代码也没有真正意义,因为
getScore()
函数只有在调用了
tworrandomScores()
之后才有意义(对于它的一个特定调用)。以下是解决此问题的一种方法:

function twoRandomScores(){
    var score1 = Math.random(1, 10);
    var score2 = Math.random(1, 10);
    return {
        score: score1 + score2,
        getScore1: function(){
            return score1;
        },
        getScore2: function(){
            return score2;
        }
    };
}

var scores = twoRandomScores();
console.log(scores.getScore1() + '+' + 
            scores.getScore2() + '=' + 
            scores.score);
同样,对于
getScore1
getScore2
有两个函数并不能真正实现任何功能,所以您可以只做以下操作:

function twoRandomScores(){
    var score1 = Math.random(1, 10);
    var score2 = Math.random(1, 10);
    return {
        score: score1 + score2,
        score1: score1,
        score2: score2
    };
}

var scores = twoRandomScores();
console.log(scores.score1 + '+' + scores.score2 + '=' + scores.score);

getScore
函数是在
twoRandomScores()
函数中定义的,因此它们不会简单地从函数外部访问。您现在编写的代码也没有真正意义,因为
getScore()
函数只有在调用了
tworrandomScores()
之后才有意义(对于它的一个特定调用)。以下是解决此问题的一种方法:

function twoRandomScores(){
    var score1 = Math.random(1, 10);
    var score2 = Math.random(1, 10);
    return {
        score: score1 + score2,
        getScore1: function(){
            return score1;
        },
        getScore2: function(){
            return score2;
        }
    };
}

var scores = twoRandomScores();
console.log(scores.getScore1() + '+' + 
            scores.getScore2() + '=' + 
            scores.score);
同样,对于
getScore1
getScore2
有两个函数并不能真正实现任何功能,所以您可以只做以下操作:

function twoRandomScores(){
    var score1 = Math.random(1, 10);
    var score2 = Math.random(1, 10);
    return {
        score: score1 + score2,
        score1: score1,
        score2: score2
    };
}

var scores = twoRandomScores();
console.log(scores.score1 + '+' + scores.score2 + '=' + scores.score);

您将常规函数与用于创建对象的函数类型混为一谈。如果您想创建一个对象()

以下内容也可以在不生成对象的情况下使用,尽管在实践中这是相当不寻常的():


您将常规函数与用于创建对象的函数类型混为一谈。如果您想创建一个对象()

以下内容也可以在不生成对象的情况下使用,尽管在实践中这是相当不寻常的():


这是一个范围问题。谢谢-请你刷新我的记忆。如何解决此问题?变量不是属性,您不能使用
此属性访问它。
。还有,你试过了吗?这是一个范围问题。谢谢-你能刷新我的记忆吗。如何解决此问题?变量不是属性,您不能使用
此属性访问它。
。另外,您尝试过吗?
getScore2
被提升,但
getScore1
没有。我想说的主要问题是关于范围,但这是一个很好的观点。谢谢-很好的观点。我尝试移动它,但在控制台中仍然得到“UncaughtReferenceError:getScore1未定义”。您可能需要移动this.getScore1=函数()。。。etc部分位于twoRandomScores()函数之外,但这就需要在twoRandomScores()函数之外定义“var score1”。。。或者按照提供的其他答案进行操作:p
getScore2
已提升,但
getScore1
未提升。我想说的主要问题是关于范围,但这是一个很好的观点。谢谢-很好的观点。我尝试移动它,但在控制台中仍然得到“UncaughtReferenceError:getScore1未定义”。您可能需要移动this.getScore1=函数()。。。etc部分位于twoRandomScores()函数之外,但这就需要在twoRandomScores()函数之外定义“var score1”。。。或者按照提供的其他答案回答:谢谢!这就是我想要的解释。函数中的getScore函数的要点是访问私有变量,而不必对其进行更改。我记得我只是完全忘记了代码。我得找个地方看看那部分。谢谢你澄清剩下的。谢谢!这就是我想要的解释。函数中的getScore函数的要点是访问私有变量,而不必对其进行更改。我记得我只是完全忘记了代码。我得找个地方看看那部分。谢谢你澄清剩下的。