繁体   English   中英

获取Javascript中的变量以动态更改

[英]Getting a variable in Javascript to change dynamically

总体来说,我对Javascript和编程还是比较陌生的,因此,我相信可以很快解释这些问题。 这是代码:

这段代码计算了从现在到上午10点之间的时差,总计为864000000,这时它应该触发日志到控制台: It's 10 am

为什么当我console.log(mill2then) ,该值保持静态?

然后,当我创建一个动态的函数时,理论上应该动态创建相同的值,我得到一个怪异的值。 我希望该值等于mill2then,大约为663000000,但是我得到-20069965并且无法完全确定原因。

var now = new Date();
var then = new Date(now.getFullYear(), now.getMonth(), now.getDate(), 10, 0, 0, 0)
var mill2then = then - now;

if (mill2then < 0) {
     mill2then += 86400000; // it's after 10am, try 10am tomorrow.
}
setTimeout(function(){console.log("It's 10am!")}, mill2then);

console.log("Run \n")

console.log("Now's time: " + Date.parse(now))
console.log("The time then: " + Date.parse(then))
console.log("The time to get there:" + mill2then + "\n")

function dynamic(){return new Date(now.getFullYear(), now.getMonth(), now.getDate(), 10, 0, 0, 0) - new Date()};

var displayDynamic = setInterval(function(){console.log("Why am I not the same as mill2then?: " + dynamic())}, 3*1000)
var displayMill = function(){setInterval(function(){console.log("Here's what the value of mill2then is: " + mill2then)}, 3*1000)};

setTimeout(function(){displayMill()}, 1.5*1000);

如果您上午10点之后运行代码,则此代码将返回一个负数:

var mill2then = then - now;

然后使用以下逻辑进行调整:

if (mill2then < 0) {
  mill2then += 86400000; // it's after 10am, try 10am tomorrow.
}

动态功能中没有相同的调整逻辑,因此为负数。

如果您上午10点之前运行代码,则两者均为正数,但只有mill2then是静态的(如MarkM所指出的)。

console.log(var)

console.log会在您调用参数时输出该参数所具有的值。 更改var的值不会使console.log()再次被调用。 您将需要执行以下操作:

setInterval(function(){
console.log(var)
},1)

这将每毫秒打印一次值,因此,如果更改该值,则将在毫秒后打印一次。

当涉及到dynamyc函数时,我不确定,请尝试在代码中添加一些()或仅返回计算值。

 function dynamic(){
 var a = new Date(now.getFullYear(), now.getMonth(), now.getDate(), 10, 0, 0, 0) - new Date();
 return a};

mill2then是静态的。 每次通话都不会改变。 在第一行中,现在将new Date()的返回值分配给var now并且保持不变-这是您进行首次调用时的日期/时间。

另一方面,函数dynamic每次调用都需要一个new Date() 每次调用它,您都会获得不同的价值。

暂无
暂无

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

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