Javascript 为什么我在这个函数中没有定义?

Javascript 为什么我在这个函数中没有定义?,javascript,Javascript,我有一个问题,保姆的工资根据时间的不同而不同: 保姆 -不早于下午5:00开始 -不迟于凌晨4点离开 -从上班时间到就寝时间每小时支付12美元 -从就寝时间到午夜每小时8美元 -从午夜到工作结束每小时16美元 -按整小时(无零碎小时)付费 我想知道为什么我在这个函数中通过时间时会变得未定义 function calculatePay (startTime, bedTime, endTime){ function formatTime(time){ if (time

我有一个问题,保姆的工资根据时间的不同而不同:

保姆 -不早于下午5:00开始 -不迟于凌晨4点离开 -从上班时间到就寝时间每小时支付12美元 -从就寝时间到午夜每小时8美元 -从午夜到工作结束每小时16美元 -按整小时(无零碎小时)付费

我想知道为什么我在这个函数中通过时间时会变得未定义

 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(开始、就寝时间、结束)的末尾现在您正在调用它,将变量作为函数参数传递,并返回它返回的任何内容。