понимание оператора возврата javascript, почему он возвращается неопределенным

1

Я работал над приведенным ниже кодом 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))
  • 0
    Ммм, интересно, можно ли играть в гольф
  • 0
    Да, это может быть. Вот всего лишь 180 символов
Теги:

2 ответа

2

Поскольку вы не возвращаетесь в свою основную функцию, по умолчанию выражение функции возвращает undefined:

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
1

Как вы вызываете solve() функцию первой и внутри solve() функции снова вы вызываете calculate() функцию. У вас есть возвращаемое значение только внутри функции calculate() не в функции solve(), причина, по которой вы получаете undefined

Ваш код должен быть таким.

DEMO

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];
    return 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];
     return  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];
   return  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))

Ещё вопросы

Сообщество Overcoder
Наверх
Меню