首页 > 解决方案 > 理解 javascript return 语句为什么返回 undefined

问题描述

我正在处理下面的 javascript 代码,有人可以解释为什么下面的代码输出是undefined

给定一年, 256th根据该年的俄罗斯官方日历找到该年的日期。

然后以格式打印dd.mm.yyyy

function solve(year) {
  if (year < 1700 || year > 2700) {
    return false;
  } else if (year >= 1700 && year <= 1917) {
    if (year % 4 === 0) {
      var days = [31, 29, 31, 30, 31, 30, 31, 31];
      calculate(days)
      `enter code here`
    }
    var days = [31, 28, 31, 30, 31, 30, 31, 31];
    calculate(days)
  } else if (year > 1918 && year <= 2700) {
    if (year % 400 === 0 || (year % 4 === 0 && year % 100 !== 0)) {
      var days = [31, 29, 31, 30, 31, 30, 31, 31];
      calculate(days)
    }
    var days = [31, 28, 31, 30, 31, 30, 31, 31];
    calculate(days)
  } else if (year === 1918) {
    var days = [31, 15, 31, 30, 31, 30, 31, 31];
    calculate(days)
  }

  function calculate(days) {
    var daysOfSep = 256 - days.reduce(function(accumulator, currentValue) {
      return accumulator + currentValue
    }, 0)

    return `${daysOfSep}.09.${year}`
  }
}

console.log(solve(1918))

标签: javascript

解决方案


因为您没有在主函数中返回,所以默认情况下函数表达式返回未定义:

function solve(year){
        if(year < 1700 || year > 2700) {
          return false;
        }else if(year >= 1700 && year <= 1917) {
          if(year%4 === 0) {
            var days = [31,29,31,30,31,30,31,31];
            calculate(days)`enter code here`
      }
          var days = [31,28,31,30,31,30,31,31];
          calculate(days)
       }else if(year > 1918 && year <= 2700) {
         if(year % 400 === 0 || (year%4 === 0 && year%100 !== 0)) {
         var days = [31,29,31,30,31,30,31,31];
         calculate(days)
       }
      var days = [31,28,31,30,31,30,31,31];
      return calculate(days) //calculate inner function returns the result, but you do not return this.
    }else if(year === 1918) {
      var days = [31,15,31,30,31,30,31,31];
      return calculate(days) //calculate inner function returns the result, but you do not return this.
    }

        function calculate (days) {
          var daysOfSep = 256 - days.reduce(function(accumulator, currentValue) {
           return accumulator + currentValue
          },0)

          return `${daysOfSep}.09.${year}`
        }
    }

    console.log(solve(1918))
 26.09.1918

推荐阅读