递归返回undefined而不是true

时间:2016-04-05 13:17:30

标签: javascript function loops if-statement recursion

我很奇怪为什么这个函数返回undefined? 有人可以帮我解释一下吗?

function isEven(i) {
  if (i === 0 ) {
    return true;
  } else if (i == 1) {
    return false;
  } else {
    console.log(i);
    isEven(i - 2);
  }
}
console.log(isEven(6));

4 个答案:

答案 0 :(得分:7)

你没有在else语句中返回。在JavaScript中,所有函数都必须返回一些内容,因此如果忘记输入return语句,它将返回undefined。

} else {
    console.log(i);
    isEven(i - 2)
}

应该是

 } else {
    console.log(i);
    return isEven(i - 2);
}

答案 1 :(得分:4)

你可以用以下方法简化这个:

function isEven(i){ return i%2===0; }

答案 2 :(得分:1)

//You should return value to expect output

function isEven(i) {
  if (i === 0 ) {
    return true;
  } else if (i == 1) {
    return false;
  } else {
    console.log(i);
    return isEven(i - 2);
  }
}

console.log(isEven(5))

答案 3 :(得分:1)

或者更简洁的风格,最后返回,因为else不是必需的,因为return结束了功能的连续性。

function isEven(i) {
    if (i === 0 ) {
        return true;
    }
    if (i == 1) {
        return false;
    }
    document.write(i + '<br>');
    return isEven(i - 2);
}
document.write(isEven(6));

最短的将是

function isEven(i) {
    return !(i & 1);
}
document.write(isEven(5));