繁体   English   中英

使用setInterval时,变量不会在全局范围内更新

[英]Variable doesn't update in global scope when using setInterval

我想编写一个函数,该函数将返回一个可以在另一个函数中使用的变量。 另一个功能应该使用当前时间和其他选定时间之间的时间比较。 我想可以通过使用return和property使时间变量在全局范围内可访问,并通过使用setInterval()对其进行更新。

不幸的是,当我将变量“导入”到另一个函数时,时间变量没有更新。

为什么不console.log('time cool outside' + obj.debug ); 返回与console.log('time cool inside' + timeCool);相同的值console.log('time cool inside' + timeCool);

function checkTime(i) {
    if (i < 10) {i = "0" + i};  // add zero in front of numbers < 10
    return i;
  }

function timeFunction() {
  let today = new Date();
  let hours = today.getHours();
  let minutes = today.getMinutes();
  minutes = checkTime(minutes);
  hours = checkTime(hours);
  let stringHours = hours.toString();
  let stringMinutes = minutes.toString();
  time = stringHours + stringMinutes;
  let timeCool = parseInt(time);
  console.log('time cool inside' + timeCool);
  return {
    debug: timeCool,
  };

}
let obj = timeFunction();
setInterval(timeFunction, 5000);
function a() {console.log('time cool outside' + obj.debug );}
setInterval(a, 5000);

在行中

let obj = timeFunction();
setInterval(timeFunction, 5000);

您创建一个全局对象obj并将其设置为timeFunction的输出。 然后使用setInterval定期调用timeFunction ,但不要将obj设置为其输出。 因此,当a访问obj它永远不会改变

让我们在这里看看你在做什么:

let obj = timeFunction();

在这里,您调用timeFunction并将其结果存储到obj

setInterval(timeFunction, 5000);

在这里,您每5秒调用一次timeFunction 返回值被取消。

function a() {console.log('time cool outside' + obj.debug );}

在这里,您有一个引用之前定义的obj变量的新函数。 obj是对timeFunction的第一次调用的返回值,并且从未更改,因此无论您调用这两个函数中的任何一个的频率如何,它始终具有相同的值。

如果要更新obj ,则需要在timeFunction内部进行timeFunction或继续将其设置为timeFunction的返回值。

谢谢你们的帮助。 确实,我没有注意到我没有更新“ obj”变量。

实施此之后:

let obj;
function objUpdate() {
obj = timeFunction();
}
setInterval(objUpdate, 1000);

一切看起来都像我想要的:)谢谢大家!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM