Javascript 为什么不是';t时间变量变化?
函数getTime(){ const d=新日期(); const secs=d.getSeconds(); const mins=d.getMinutes(); const hours=d.getHours(); 返回{ “小时”:小时, “分钟”:分钟, “秒”:秒 } } 让时间=getTime(); setInterval(getTime,1000); 设置间隔(()=>{ log(`time.hours}:${time.mins}:${time.secs}`);Javascript 为什么不是';t时间变量变化?,javascript,variables,ecmascript-6,declaration,Javascript,Variables,Ecmascript 6,Declaration,函数getTime(){ const d=新日期(); const secs=d.getSeconds(); const mins=d.getMinutes(); const hours=d.getHours(); 返回{ “小时”:小时, “分钟”:分钟, “秒”:秒 } } 让时间=getTime(); setInterval(getTime,1000); 设置间隔(()=>{ log(`time.hours}:${time.mins}:${time.secs}`); }, 1000);ti
}, 1000);代码>
time
变量仅在脚本加载并保持该状态时声明一次。将其移动到间隔内以保持更新。
函数getTime(){
const d=新日期();
const secs=d.getSeconds();
const mins=d.getMinutes();
const hours=d.getHours();
返回{
“小时”:小时,
“分钟”:分钟,
“秒”:秒
}
}
设置间隔(()=>{
const time=getTime();
log(`time.hours}:${time.mins}:${time.secs}`);
}, 1000);此时,您只需将
时间的值设置为getTime()
一次
如果希望更改值,则必须在每次迭代中再次设置该值
setInterval(() => {
var time = getTime();
console.log(`${time.hours}:${time.mins}:${time.secs}`);
}, 1000);
时间不会改变,因为您使用的变量不会更新。
这里有两个问题
const time=getTime()//其调用一次和时间值为常量
再也不会改变了
setInterval(getTime,1000)//这里函数正在执行,但是
返回值从未使用过,也从未分配给时间变量
是印刷的
函数getTime(){
const d=新日期();
const secs=d.getSeconds();
const mins=d.getMinutes();
const hours=d.getHours();
返回{
“小时”:小时,
“分钟”:分钟,
“秒”:秒
}
}
//const time=getTime()//它被调用一次,时间值为const,以后将不再更改
//setInterval(getTime,1000)//在这里,函数正在执行,但返回值从未使用,也从未分配给打印的时间变量。
设置间隔(()=>{
var-time=getTime();
//盖蒂姆
log(`time.hours}:${time.mins}:${time.secs}`);
}, 1000);
这是因为您没有更新time
变量,只是在setInterval
中调用getTime
应该是这样的:
setInterval(function() {
time = getTime();
console.log(`${time.hours}:${time.mins}:${time.secs}`);
}, 1000);
注意:
如果使用cons
关键字将time
变量声明为常量,尝试更改它将抛出以下错误:
未捕获类型错误:分配给常量变量
演示:
函数getTime(){
const d=新日期();
const secs=d.getSeconds();
const mins=d.getMinutes();
const hours=d.getHours();
返回{
“小时”:小时,
“分钟”:分钟,
“秒”:秒
}
}
var-time=getTime();
setInterval(函数(){
time=getTime();
log(`time.hours}:${time.mins}:${time.secs}`);
}, 1000);代码>哈!我已经将“时间”改为“让”,因为我想这是在这个脚本的范围内改变的。但是,const是可以的,因为这些值都不会在函数的范围内改变……这是我想到的第一件事。此外,我非常确定es6如果试图重新写入到“const”,实际上会出错……不确定。是的!就这样。我一看到你答案的第一部分…就只分配一次!:(@VisWebsoft是的,它需要在
setInterval
回调中分配。刚刚分配。IDK我们需要等待10分钟才能接受。