Я работал над приведенным ниже кодом 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))
Поскольку вы не возвращаетесь в свою основную функцию, по умолчанию выражение функции возвращает 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
Как вы вызываете 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))