Javascript 为什么我在这个函数中没有定义?
我有一个问题,保姆的工资根据时间的不同而不同: 保姆 -不早于下午5:00开始 -不迟于凌晨4点离开 -从上班时间到就寝时间每小时支付12美元 -从就寝时间到午夜每小时8美元 -从午夜到工作结束每小时16美元 -按整小时(无零碎小时)付费 我想知道为什么我在这个函数中通过时间时会变得未定义Javascript 为什么我在这个函数中没有定义?,javascript,Javascript,我有一个问题,保姆的工资根据时间的不同而不同: 保姆 -不早于下午5:00开始 -不迟于凌晨4点离开 -从上班时间到就寝时间每小时支付12美元 -从就寝时间到午夜每小时8美元 -从午夜到工作结束每小时16美元 -按整小时(无零碎小时)付费 我想知道为什么我在这个函数中通过时间时会变得未定义 function calculatePay (startTime, bedTime, endTime){ function formatTime(time){ if (time
function calculatePay (startTime, bedTime, endTime){
function formatTime(time){
if (time.indexOf('00') === -1){
time = Number(time.split(":").shift()) + 1;
} else {
time = Number(time.split(":").shift());
}
if (time < 5) {
time = time + 12;
}
return time;
};
var start = formatTime(startTime);
var bedtime = formatTime(bedTime);
var end = formatTime(endTime);
var scheduleRange = {
start: 5,
lateNight: 12,
end: 16,
}
var payrate = {
beforeBed: 12,
sleeping: 8,
afterMidnight: 16
}
var calculateBeforeBed = function (start, bedtime) {
if (bedtime > start && bedtime <= scheduleRange.lateNight){
var beforeBedEarned = (bedtime - start) * payrate.beforeBed;
return beforeBedEarned;
} else if (bedtime > scheduleRange.lateNight) {
var beforeBedEarned = (scheduleRange.lateNight - start) * payrate.beforeBed;
return beforeBedEarned;
} else {
return 0;
}
};
var calculateAfterBed = function (start, bedtime, end) {
if (bedtime > start && bedtime <= scheduleRange.lateNight && bedtime <= end) {
var afterBedEarned = (scheduleRange.lateNight - bedtime) * payrate.sleeping;
return afterBedEarned;
} else if (bedtime <= start && end <= scheduleRange.lateNight){
afterBedEarned = (end - start) * payrate.sleeping;
return afterBedEarned;
} else if (bedtime <= start && end > scheduleRange.lateNight){
afterBedEarned = (scheduleRange.lateNight - start) * payrate.sleeping;
return afterBedEarned;
}
else {
return 0;
}
};
var calculateAfterMidnight = function (start, end) {
if (end > scheduleRange.lateNight && start <= scheduleRange.lateNight) {
var lateNightEarned = (end - scheduleRange.lateNight) * payrate.afterMidnight;
return lateNightEarned;
} else if (end > scheduleRange.lateNight && start > scheduleRange.lateNight) {
lateNightEarned = (end - start) * payrate.afterMidnight;
return lateNightEarned;
} else {
return 0;
}
};
function finalInvoice (start, bedtime, end){
if(start >= scheduleRange.start && end <= scheduleRange.end){
var pay = calculateBeforeBed(start, bedtime) + calculateAfterBed(start, bedtime, end)+ calculateAfterMidnight(start, end);
return pay;
};
};
}
calculatePay("7:00", "10:00", "1:00");
函数计算路径(开始时间、就寝时间、结束时间){
函数格式化时间(time){
if(time.indexOf('00')=-1){
时间=数字(time.split(“:”).shift())+1;
}否则{
时间=数字(time.split(“:”).shift();
}
如果(时间<5){
时间=时间+12;
}
返回时间;
};
var start=格式化时间(startTime);
var bedtime=格式时间(bedtime);
var end=格式时间(endTime);
变量计划范围={
开始时间:5,
深夜:12,,
完:16,,
}
var付款率={
睡前:12,,
睡眠时间:8,
午夜后:16
}
var calculateBeforeBed=函数(开始,就寝时间){
if(就寝时间>开始和就寝时间计划范围。深夜){
var BeforeBeed=(scheduleRange.lateNight-开始)*payrate.BeforeBeed;
提前返回;
}否则{
返回0;
}
};
var calculateAfterBed=函数(开始、就寝时间、结束){
如果(就寝时间>开始和就寝时间,因为您的函数没有返回语句
函数无效和(a、b、c){
var结果=a+b+c;
}
函数和(a,b,c){
var结果=a+b+c;
返回结果;
}
控制台日志('voidfn',voidsum(123321231));
控制台日志('sum',sum(123321231))因为你什么也不返回。你有一堆嵌套函数,它们有自己的return
语句,但这对外部函数没有影响。你是因为哪个函数而得到错误的?看起来你的finalInvoice
函数根本不应该是函数。只要从中取出代码,然后展开它来自函数finalInvoice(开始、就寝时间、结束){…}
并且应该可以工作,因为您已经将开始、就寝时间、结束
定义为变量。如果您想将finalInvoice
保留为一个函数,那么将其添加到外部函数return finalInvoice(开始、就寝时间、结束)的末尾现在您正在调用它,将变量作为函数参数传递,并返回它返回的任何内容。