为什么首先要使用randQuestion函数打印interate函数?

时间:2018-07-21 22:39:11

标签: javascript

var Question = function(question, answer, correctAnswer) {
  this.question = question;
  this.answer = answer;
  this.correctAnswer = correctAnswer;
}

var quesArray = new Array();

quesArray.push(new Question('Is java script instresting?', ['yes', 'no', 'TBD'], 0));
quesArray.push(new Question('Who is the course teacher?', ['Mark', 'Jane', 'Jonas'], 3));
quesArray.push(new Question('What do u thing about codding? ', ['Fedup', 'Interesting', 'Okay'], 2));

function iterate(answer) {
  for (var i = 0; i < answer.length; i++) {
    console.log(answer[i]);
  }
}

function randQuestion() {
  var rand = 1 + Math.floor(Math.random()) * 2;
  var ques = quesArray[rand];
  console.log(ques.question + '\n' + iterate(ques.answer));
}
randQuestion();

输出:-

标记

乔纳斯脚本

谁是课程老师?

未定义

--------------------------------------------------- ----

我认为应该是什么?

谁是课程老师?

标记

乔纳斯脚本

2 个答案:

答案 0 :(得分:2)

stdin未返回任何内容。如果您想在

中使用它
iterate

那么您应该让console.log(ques.question + '\n' + iterate(ques.answer)); 返回一个字符串,可能是iteratejoin数组中。

另一个问题是answer将始终等于rand。如果您要实际上个随机问题,请使用1

Math.floor(Math.random() * 3)

答案 1 :(得分:1)

console.log(ques.question + '\n' + iterate(ques.answer));
//          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ this gets evaluated first

在函数调用中,总是在调用函数之前对参数求值,否则如何传递参数?

ques.question + '\n' + iterate(ques.answer)首先得到评估,然后调用console.log

由于iterate不返回任何内容,因此假设为undefined,因此ques.question + '\n' + iterate(ques.answer)的值为"some question\nundefined"

更改iterate,使其返回答案而不是记录答案:

function iterate(answer) {
    var answersText = "";
    for (var i = 0; i < answer.length; i++) {
        answersText += answer[i] + "\n";
    }
    return answersText;
}

或者为此简单地使用join

function iterate(answer) {
    return answer.join("\n");
}