Javascript Can';t访问函数返回的值
我试图在discord bot上显示到某个日期的剩余时间,并且有一个函数提供剩余时间,但是调用单个变量的命令表示返回变量没有定义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
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!非常感谢你的解释。很高兴我能帮忙。