我多年没有完成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());
答案 0 :(得分:2)
getScore
函数在 内部定义 twoRandomScores()
函数,因此无法从外部访问它们。您现在编写的代码并不真正有意义,因为getScore()
函数只有在调用 twoRandomScores()
之后才会有任何含义对于它的一个特定要求)。这是解决这个问题的唯一方法:
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);
答案 1 :(得分:1)
确定您的代码是正确的?在分配getScore1之前,您将返回该函数,因此不会发生对getScore1和getScore2的分配。因此未定义的错误......
答案 2 :(得分:1)
您将常规函数与用于创建对象的函数类型混合在一起。如果你想创建一个对象(JSFiddle)
,这就是它的工作方式function RandomScore() {
var score1 = Math.random() * 10,
score2 = Math.random() * 10;
// make functions which are properties of the new object
this.sum = function() {
return score1 + score2;
}
this.getScore1 = function() {
return score1;
}
this.getScore2 = function() {
return score2;
}
}
var randomScore = new RandomScore();
console.log(randomScore.getScore1() + '+' + randomScore.getScore2() + '=' + randomScore.sum());
以下也可以在不制作对象的情况下工作,尽管在实践中它会很不寻常(JSFiddle):
var getScore1, getScore2, sum; // define variables with global scope
function randomScore() {
var score1 = Math.random() * 10,
score2 = Math.random() * 10;
getScore1 = function() {
return score1;
}
getScore2 = function() {
return score2;
}
return score1 + score2;
}
// we need to run the function once before
// getScore1 and getScore2 will have any functions assigned to them
sum = randomScore();
// now we can access getScore1 and getScore2 outside of our randomScore function
console.log(getScore1() + '+' + getScore2() + '=' + sum);