我想编写一个函数,该函数将返回一个可以在另一个函数中使用的变量。另一个功能应该使用当前时间和其他选定时间之间的时间比较。我想可以通过使用return和property使时间变量在全局范围内可访问,并通过使用setInterval()
对其进行更新。
不幸的是,当我将变量“导入”到另一个函数时,时间变量没有更新。
为什么不
console.log('time cool outside' + obj.debug );
返回与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);
答案 0 :(得分:4)
在线
let obj = timeFunction();
setInterval(timeFunction, 5000);
您创建一个全局对象obj
并将其设置为timeFunction
的输出。然后使用setInterval
定期调用timeFunction
,但不要将obj
设置为其输出。因此,当a
访问obj
时,它永远不会改变
答案 1 :(得分:1)
让我们看看您在这里做什么:
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
。
答案 2 :(得分:0)
谢谢你们的帮助。确实,我没有注意到我没有更新“ obj”变量。
执行此操作后:
let obj;
function objUpdate() {
obj = timeFunction();
}
setInterval(objUpdate, 1000);
一切看起来都像我想要的:) 谢谢大家!