Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/security/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Can';t访问函数返回的值_Javascript - Fatal编程技术网

Javascript Can';t访问函数返回的值

Javascript Can';t访问函数返回的值,javascript,Javascript,我试图在discord bot上显示到某个日期的剩余时间,并且有一个函数提供剩余时间,但是调用单个变量的命令表示返回变量没有定义 function getTimeRemaining(endTime){ const total = Date.parse(endTime) - Date.parse(new Date()); const seconds = Math.floor((total/1000)%60); const minutes = Math.floor((tota

我试图在discord bot上显示到某个日期的剩余时间,并且有一个函数提供剩余时间,但是调用单个变量的命令表示返回变量没有定义

function getTimeRemaining(endTime){
    const total = Date.parse(endTime) - Date.parse(new Date());
    const seconds = Math.floor((total/1000)%60);
    const minutes = Math.floor((total/1000/60)%60);
    const hours = Math.floor((total/(1000*60*60))%24);
    const days = Math.floor(total/(1000*60*60*24));
    return{
        total,
        days,
        hours,
        minutes,
        seconds
    };
};

if (command == 'time'){
    const releaseDate = 'November 14 2020'
    getTimeRemaining(releaseDate);
    message.channel.send(days + ' days, ' + hours + ' hours, ' + minutes + ' minutes, ' + seconds + ' seconds until ___.');
};
返回具有定义值的变量需要更改什么

function getTimeRemaining(endTime){
  const total = Date.parse(endTime) - Date.parse(new Date());
  const seconds = Math.floor((total/1000)%60);
  const minutes = Math.floor((total/1000/60)%60);
  const hours = Math.floor((total/(1000*60*60))%24);
  const days = Math.floor(total/(1000*60*60*24));
  return {
      total,
      days,
      hours,
      minutes,
      seconds
  };
};

if(command == 'time'){
  const releaseDate = 'November 14 2020'
  let timeRemaining = getTimeRemaining(releaseDate);
  message.channel.send(timeRemaining.days + ' days, ' + timeRemaining.hours + ' hours, ' + timeRemaining.minutes + ' minutes, ' + timeRemaining.seconds + ' seconds until ___.');
};
我在这里做的是创建一个名为
timeRemaining
的新变量。这调用了你的函数,在函数中你已经返回了一个对象。一旦你有了一个对象值的变量,你就可以这样做了

ie剩余时间.day将返回当天。

您很接近。你的错误是可以理解的。当调用“getTimeRemaining”函数时,返回的值实际上不是全局值。您需要通过实际调用函数来获取每个返回值(返回值使用点表示法)

下面添加注释的示例代码

更多关于返回值的信息,请点击这里------->

希望这有帮助


试验
函数getTimeRemaining(endTime){
const total=Date.parse(endTime)-Date.parse(new Date());
常数秒=数学楼层((总计/1000)%60);
常数分钟=数学楼层((总计/1000/60)%60);
施工时数=数学楼层((总计/(1000*60*60))%24);
施工天数=数学楼层(总计/(1000*60*60*24));
返回{
全部的
天,
小时,
会议记录,
秒
};
};
const命令='time'
如果(命令==‘时间’){
const releaseDate='2020年11月14日'
//您在这里运行函数并不意味着这些返回值是全局的
log(getTimeRemaining(releaseDate));
//您需要实际调用该函数并传递您需要返回的内容
日志(getTimeRemaining(releaseDate).days)
var total=GetTimeLeving(发布日期)。总计,
天=剩余的GetTimeDate(releaseDate)。天,
小时数=GetTime剩余时间(发布日期)。小时数,
分钟数=GetTime剩余时间(发布日期)。分钟数,
秒=getTimeRemaining(releaseDate)。秒;
日志(总计、天、小时、分钟、秒);
//message.channel.send(天+天+小时+小时+分钟+分钟+秒+秒直到uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu;
};
理论 问题在于您对编程语言中变量如何工作的理解。在Javascript和许多其他语言中,有一个概念叫做。范围界定背后的理念是,每个变量(函数也是)只能从某些地方访问(即可以修改或访问)。这些“位置”就是我们所说的范围

变量的范围由声明变量的位置决定。例如
const seconds=Math.floor((总计/1000)%60)
getTimeRemaining
内部声明,这意味着变量
seconds
将仅在
getTimeRemaining
内部已知。在
getTimeRemaining
外部访问变量的任何尝试都将导致错误

糟糕的解决方案 如上所述,一个变量只能在其作用域内访问,因此解决问题的一种方法是在它的外部,在一个我们称为根作用域的作用域内,访问您在其内部使用的所有变量
getTimeRemaining
,因此过程有两个方面:

  • 首先,我们声明根范围中的变量
  • 然后,我们在
    getTimeRemaining
    中更改它们的值
//使用let而不是const,因为我们不能在声明后修改const
让总数,秒,分,小时,天;
函数getTimeRemaining(endTime){
//修改根作用域的变量
total=Date.parse(endTime)-Date.parse(newdate());
秒=数学楼层((总计/1000)%60);
分钟=数学楼层((总计/1000/60)%60);
小时=数学楼层((总计/(1000*60*60))%24);
天数=数学下限(总计/(1000*60*60*24));
//这里不需要退货
};
const releaseDate=‘2020年11月14日’;
GetTime剩余时间(发布日期);

日志(天+天+小时+小时+分钟+分钟+秒+秒直到__; _;)您认为如何,代码中的
return
关键字的作用/目的是什么?欢迎使用StackOverflow!除了提供一个固定的代码作为答案外,向OP解释其原始代码中的错误也很有帮助,这样他们就可以从错误中吸取教训。非常感谢,我现在理解了范围界定的概念。很高兴帮助@AbdulBasitKhan!非常感谢你的解释。很高兴我能帮忙。