在JS中使用timer设置变量

时间:2016-08-03 13:10:27

标签: javascript

试图弄清楚如何做到这一点,我不太确定。我尝试使用setTimeout每3秒更新一次本地GPS坐标,但它无法正常工作。我对js很新,所以对任何帮助表示赞赏。这是我到目前为止 -

在我的主JS文件中,我有这个......

var lat_in={};
var long_in={};
var alt_in={};

$.getScript("test_points.js", function(){
    console.log("TP script go");
});

$("#Initiate").click(function() {

  if (coordinate=="GPS")
     {
     console.log("GPS go");
     lat_out = lat_in;
     long_out = long_in;
     alt_out = alt_in;
         console.log(lat_out, long_out, alt_out)
     }

)}

我从另一个js文档(test_points.js)调用lat / long / alt,其中setTimeout是......

setTimeout(function(){
    var lat_in=5;
    var long_in=5;
    var alt_in=-5;
}, 3000);

我有一堆setTimeout一个接一个,我想要做的是每隔3秒更新一次变量并再次通过if语句运行它们。

我甚至接近这样做了吗?提前致谢

4 个答案:

答案 0 :(得分:2)

您已使用“var”关键字声明这些变量,这使它们成为传递给超时函数的函数的本地变量。请删除var并重试。

编辑: 正如其他人所指出的那样,你应该使用interval而不是timeout,一旦反映出更改,那么只有你应该尝试访问它们。

答案 1 :(得分:1)

JavaScript 有两种计时器,一种提供称为window.setTimeout的超时(延迟执行一段代码)(因为setTimeout是window对象的一种方法)和一个在一段时间内运行一段代码的计时器window.setInterval

观察两者是如何工作的

setTimeout(function(){
document.getElementById("showcase").innerHTML += "setTimeout fired only once after 3 seconds. <br />"}, 3000);

setInterval(function(){
document.getElementById("showcase").innerHTML += "setInterval fired every after 5 seconds. <br />"}, 5000);


//not part of the solution, just to demonstrate.
setInterval(function(){
document.getElementById("timer").textContent = 1 + parseInt(document.getElementById("timer").textContent);
}, 1000)
#showcase {
  padding: 4px;
  border: 1px solid grey;
  background-color: #f3f3f3;
}
<span id="timer">0</span> seconds <br />
<div id="showcase"></div>

要让计时器多次运行,请使用setInterval

关于你的案子

setTimeout(function(){
    var lat_in=5;
    var long_in=5;
    var alt_in=-5;
}, 3000);

setTimeout替换为setInterval时,它仍然无效。正如其他人评论的那样,您在函数的scope内声明了lat_in等。这意味着该函数内的变量只是在与区间绑定的函数内的accessibele。关键字为var。它告诉解析器将变量“绑定”到函数的范围。保留var,您的计时器函数将覆盖在函数外声明的全局变量。下面的样本应该没问题。

setInterval(function(){
    lat_in=5;
    long_in=5;
    alt_in=-5;
}, 3000);

当你第一次声明变量时,它们被声明为空对象。

var lat_in={};
var long_in={};
var alt_in={};  

使用{}与执行lat_in = new Object()相同。但是在您的函数中,您用整数覆盖它们。也许这不是故意的。检查GPS编码的文档,了解它需要什么输入。

我们在这里:

您也可以使用window.clearTimeoutwindow.clearInterval停止计时器。每个人当然都提到自己的功能。

为此,您需要将计时器存储到变量中:

timer = window.SetInterval(function(){ ... }, 3000); //always in milliseconds.
clearInterval(timer); // this line will now clear the timer.

聪明的人也会说:“我可以让setTimeout表现得像个间隔。”

window.setTimeout(myTimerFunction, 3000);
function myTimerFunction(){
    //do stuff here
    window.setTimeout(myTimerFunction, 3000);  //call itself again in three seconds.
}

答案 2 :(得分:0)

由于setTime out是异步的,因此在初始化之前不应该像lat_out = lat_in;那样启动表达式。

此外,您还使用Var声明变量,使其成为local.so remove var。

答案 3 :(得分:0)

只需使用setInterval函数在持续间隔后调用函数

&#13;
&#13;
$("#Initiate").click(function() {
	var intervalCall = window.setInterval(myCallback, 3000);
)} 

function myCallback(){
  if (coordinate=="GPS")
	{
	  console.log("GPS go");
	  lat_out = lat_in;
	  long_out = long_in;
	  alt_out = alt_in;
	  console.log(lat_out, long_out, alt_out)
	}

}
&#13;
&#13;
&#13;

有关setInterval的详情,您可以read here