我遇到了递归javascript函数的问题 - 返回值未定义:
function get_next_weekday(timesec) {
var nextdaytogo = timesec;
var nextday;
var hour = timesec.getHours();
initstunden = 13 - hour;
initminuten = 59 - timesec.getMinutes();
var holidays = [
new Date(2016, 11, 25).toDateString(), new Date(2016, 11, 26).toDateString(), new Date(2017, 00, 01).toDateString(), new Date(2017, 00, 06).toDateString(),
new Date(2017, 03, 14).toDateString(), new Date(2017, 03, 17).toDateString(), new Date(2017, 04, 01).toDateString(), new Date(2017, 04, 25).toDateString(),
new Date(2017, 05, 05).toDateString(), new Date(2017, 05, 15).toDateString(), new Date(2017, 09, 03).toDateString(), new Date(2017, 10, 01).toDateString(),
new Date(2017, 11, 25).toDateString(), new Date(2017, 11, 26).toDateString(), new Date(2018, 00, 01).toDateString(), new Date(2018, 00, 06).toDateString(),
new Date(2018, 02, 30).toDateString(), new Date(2018, 03, 02).toDateString(), new Date(2018, 04, 01).toDateString(), new Date(2018, 04, 10).toDateString(),
new Date(2018, 04, 21).toDateString(), new Date(2018, 04, 31).toDateString(), new Date(2018, 09, 03).toDateString(), new Date(2018, 10, 01).toDateString(),
new Date(2018, 11, 25).toDateString(), new Date(2018, 11, 26).toDateString()
];
if ( $.inArray(timesec.toDateString(), holidays) > -1 || timesec.getDay() == 0 || timesec.getDay() == 6) {
console.log("if() Statement")
//Holiday
if ( $.inArray(timesec.toDateString(), holidays) > -1){
console.log("Holiday Func." + timesec);
var nextday = new Date(timesec.getTime() + 24 * 60 * 60 * 1000);
var next = get_next_weekday(nextday);
}
//Sunday
else if (timesec.getDay() == 0){
console.log("Sunday Func." + timesec);
var nextday = new Date(timesec.getTime() + 24 * 60 * 60 * 1000);
var next = get_next_weekday(nextday);
}
//Saturday
else if (timesec.getDay() == 6){
console.log("Saturday Func." + timesec);
var nextday = new Date(timesec.getTime() + 24 * 60 * 60 * 1000);
var next = get_next_weekday(nextday);
}
else console.log("Und. Func.");
}
else{
console.log("else Statement - Value: " + next);
return timesec;
}
}
var daydeliver = get_next_weekday(aktuell);
console.log("Func. - Return: " + daydeliver);
这是日志:
有人可以帮我解决这个问题吗?
答案 0 :(得分:0)
这是因为你在本地范围内声明var +在递归fn触发时你什么都不返回。我想你希望next
保持递归fn的前一个日期。请查看以下内容:
//next will return undefined if no recursive function called
var next;
function get_next_weekday(timesec) {
var nextdaytogo = timesec;
var nextday;
var hour = timesec.getHours();
initstunden = 13 - hour;
initminuten = 59 - timesec.getMinutes();
var holidays = [
new Date(2016, 11, 25).toDateString(), new Date(2016, 11, 26).toDateString(), new Date(2017, 00, 01).toDateString(), new Date(2017, 00, 06).toDateString(),
new Date(2017, 03, 14).toDateString(), new Date(2017, 03, 17).toDateString(), new Date(2017, 04, 01).toDateString(), new Date(2017, 04, 25).toDateString(),
new Date(2017, 05, 05).toDateString(), new Date(2017, 05, 15).toDateString(), new Date(2017, 09, 03).toDateString(), new Date(2017, 10, 01).toDateString(),
new Date(2017, 11, 25).toDateString(), new Date(2017, 11, 26).toDateString(), new Date(2018, 00, 01).toDateString(), new Date(2018, 00, 06).toDateString(),
new Date(2018, 02, 30).toDateString(), new Date(2018, 03, 02).toDateString(), new Date(2018, 04, 01).toDateString(), new Date(2018, 04, 10).toDateString(),
new Date(2018, 04, 21).toDateString(), new Date(2018, 04, 31).toDateString(), new Date(2018, 09, 03).toDateString(), new Date(2018, 10, 01).toDateString(),
new Date(2018, 11, 25).toDateString(), new Date(2018, 11, 26).toDateString()
];
if ( $.inArray(timesec.toDateString(), holidays) > -1 || timesec.getDay() == 0 || timesec.getDay() == 6) {
console.log("if() Statement")
//Holiday
if ( $.inArray(timesec.toDateString(), holidays) > -1){
console.log("Holiday Func." + timesec);
let nextday = new Date(timesec.getTime() + 24 * 60 * 60 * 1000);
next = timesec;
return get_next_weekday(nextday);
}
//Sunday
else if (timesec.getDay() == 0){
console.log("Sunday Func." + timesec);
let nextday = new Date(timesec.getTime() + 24 * 60 * 60 * 1000);
next = timesec;
return get_next_weekday(nextday);
}
//Saturday
else if (timesec.getDay() == 6){
console.log("Saturday Func." + timesec);
let nextday = new Date(timesec.getTime() + 24 * 60 * 60 * 1000);
next = timesec;
return get_next_weekday(nextday);
}
else {console.log("Und. Func.");
next = "Und. Func.";return;
}
}
else{
console.log("else Statement - Value: " + next);
return timesec;
}
}
var daydeliver = get_next_weekday(new Date(2016, 11, 11));
console.log("Func. - Return: " + daydeliver);
<script src="https://ajax.aspnetcdn.com/ajax/jQuery/jquery-3.1.1.min.js"></script>