Javascript 这是范围问题还是函数创建问题?
我已经好几年没有使用Javascript了,我正在努力重新使用它。我只想创建一对随机数,并将它们相加。我还想练习使用“getVariable()”来保护对原始变量的操作,同时使整个脚本都可以访问它们。我一定是记错了,否则我真的做了件蠢事。我一直收到一条消息,getScore1未定义。我试着把它写成函数getScore1()和this.getScore1=function(){}。有人能给我指一下正确的方向吗Javascript 这是范围问题还是函数创建问题?,javascript,Javascript,我已经好几年没有使用Javascript了,我正在努力重新使用它。我只想创建一对随机数,并将它们相加。我还想练习使用“getVariable()”来保护对原始变量的操作,同时使整个脚本都可以访问它们。我一定是记错了,否则我真的做了件蠢事。我一直收到一条消息,getScore1未定义。我试着把它写成函数getScore1()和this.getScore1=function(){}。有人能给我指一下正确的方向吗 function twoRandomScores(){ var score1 =
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”。。。或者按照提供的其他答案进行操作:pgetScore2
已提升,但getScore1
未提升。我想说的主要问题是关于范围,但这是一个很好的观点。谢谢-很好的观点。我尝试移动它,但在控制台中仍然得到“UncaughtReferenceError:getScore1未定义”。您可能需要移动this.getScore1=函数()。。。etc部分位于twoRandomScores()函数之外,但这就需要在twoRandomScores()函数之外定义“var score1”。。。或者按照提供的其他答案回答:谢谢!这就是我想要的解释。函数中的getScore函数的要点是访问私有变量,而不必对其进行更改。我记得我只是完全忘记了代码。我得找个地方看看那部分。谢谢你澄清剩下的。谢谢!这就是我想要的解释。函数中的getScore函数的要点是访问私有变量,而不必对其进行更改。我记得我只是完全忘记了代码。我得找个地方看看那部分。谢谢你澄清剩下的。