需要帮助了解此JS函数代码

时间:2019-08-05 01:04:09

标签: javascript

我是新手,正在学习JavaScript。我正在学习辅助函数的概念,无法理解为什么这段代码不产生数字值。

function numOfAdults(parents) {
  parents *= 10;
  return parents;
}

function numOfChildren(children) {
  children = numOfAdults() * 5;
  return children;
}
console.log(numOfAdults(2));
console.log(numOfChildren());

我希望numOfChildren();的结果为100,但得到NaN.

3 个答案:

答案 0 :(得分:1)

实际的为什么

function numOfAdults(parents) {
  console.log(parents); // undefined
  console.log(parents * 10); // NaN
}
numOfAdults();

不带参数调用该函数会导致其参数未定义

在计算中使用 undefined 通常会产生 NaN (意思是:不是数字)。此外, NaN传播,因为在计算中使用NaN会反过来产生NaN。

因此,您可以看到意外使用了一个未定义的值,即NaN,它一直通过numOfChildren传播到最终的console.log

答案 1 :(得分:0)

numOfAdults不会传递任何值。如果您不希望它返回NaN,则必须传递一个值。由于我不知道想要什么值,因此在以下示例中添加了虚拟值“ 5”:

function numOfAdults(parents) {
  parents *= 10;
  return parents;
}

function numOfChildren(children) {
  number = 5; //Get the "parents" value, somehow
  children = numOfAdults(number) * 5; //Pass it to numOfAdults
  return children;
}
console.log(numOfAdults(2));
console.log(numOfChildren());

答案 2 :(得分:0)

问题是您没有将参数传递给numOfAdults,因此返回值为undefined。正确的代码应如下所示:

function numOfAdults(parents) {
  parents *= 10;
  return parents;
}

function numOfChildren(children) {
  children = numOfAdults(children) * 5;
  return children;
}
console.log(numOfAdults(2));

您可以通过检查传递的参数是否有效来改进代码:

function numOfAdults(parents) {
  if (parents === undefined) {
    parents = 1; //1 parent by default
  }
  parents *= 10;
  return parents;
}

function numOfChildren(children) {
  children = numOfAdults(children) * 5;
  return children;
}

console.log(numOfAdults());
console.log(numOfChildren());

类似地(如果您使用的是ES6),您可以设置default parameter,如果调用代码未传递this answer of mine to your previous question

function numOfAdults(parents = 1) { //1 parent by default
  parents *= 10;
  return parents;
}

function numOfChildren(children) {
  children = numOfAdults(children) * 5;
  return children;
}

console.log(numOfAdults());
console.log(numOfChildren());