为什么时间变量不变?

时间:2017-11-16 15:39:33

标签: javascript variables ecmascript-6 declaration



function getTime() {
      const d = new Date();
      const secs = d.getSeconds();
      const mins = d.getMinutes();
      const hours = d.getHours();
      
      return {
        'hours': hours,
        'mins': mins,
        'secs': secs
      }
    }
   
    let time = getTime();

    setInterval(getTime, 1000);
    setInterval(() => {
      console.log(`${time.hours}:${time.mins}:${time.secs}`);
    }, 1000);




显示的时间不会改变。它只是连续运行,输出相同的时间而不是每秒都显示一次变化......

4 个答案:

答案 0 :(得分:3)

当脚本加载并保持该状态时,

time变量仅被声明一次。在间隔内移动它以保持更新。

function getTime() {
  const d = new Date();
  const secs = d.getSeconds();
  const mins = d.getMinutes();
  const hours = d.getHours();

  return {
    'hours': hours,
    'mins': mins,
    'secs': secs
  }
}

setInterval(() => {
  const time = getTime();
  console.log(`${time.hours}:${time.mins}:${time.secs}`);
}, 1000);

答案 1 :(得分:3)

您只需将time的值设置一次,此时的值为getTime()

如果要更改值,则必须在每次迭代时再次设置值。

setInterval(() => {
    var time = getTime();
    console.log(`${time.hours}:${time.mins}:${time.secs}`);
}, 1000);

答案 2 :(得分:2)

这是因为您没有更新time变量,只是在getTime中调用setInterval

应该是这样的:

setInterval(function() {
  time = getTime();
  console.log(`${time.hours}:${time.mins}:${time.secs}`);
}, 1000);

注意:

如果您使用time关键字将cons变量声明为常量,尝试更改它会引发此错误:

  

未捕获的TypeError:分配给常量变量。

<强>演示:

function getTime() {
  const d = new Date();
  const secs = d.getSeconds();
  const mins = d.getMinutes();
  const hours = d.getHours();

  return {
    'hours': hours,
    'mins': mins,
    'secs': secs
  }
}

var time = getTime();

setInterval(function() {
  time = getTime();
    console.log(`${time.hours}:${time.mins}:${time.secs}`);
}, 1000);

答案 3 :(得分:1)

时间不会改变,因为您正在使用未更新的变量。 这是两个问题

  

const time = getTime(); //调用一次,时间值为const   永远不会再改变

     

setInterval(getTime,1000); //此处函数正在执行但是   永远不会使用返回值,也永远不会将其分配给时间变量   打印出来。

function getTime() {
  const d = new Date();
  const secs = d.getSeconds();
  const mins = d.getMinutes();
  const hours = d.getHours();

  return {
    'hours': hours,
    'mins': mins,
    'secs': secs
  }
}

//const time = getTime();//its called once and time values are const will never change again

//setInterval(getTime, 1000);//here function is getting executed but return value is never used and never assigned to time variable which is printed.
setInterval(() => {
  var time=getTime();
  //getTime
  console.log(`${time.hours}:${time.mins}:${time.secs}`);
}, 1000);