我能';似乎无法让jquery变量保留其值

我能';似乎无法让jquery变量保留其值,jquery,variables,global-variables,Jquery,Variables,Global Variables,我试图创建一个全局变量,它从0开始,每秒钟递增1。这是我的密码: $(document).ready(function() { time = 0; setTimeout(function(){ time += 1; }, 1000); }); 问题是,当我输出时间值时(在time+=1行之后),该值始终为1。我希望它是1,2,3,4,5。。等等我已经看到,不将var放在变量声明的前面会使它成为全局变量,但这并没有保留值 在我看来,问题在于time=0

我试图创建一个全局变量,它从0开始,每秒钟递增1。这是我的密码:

$(document).ready(function()
{
    time = 0;

    setTimeout(function(){
        time += 1;
    }, 1000);

});
问题是,当我输出时间值时(在time+=1行之后),该值始终为1。我希望它是1,2,3,4,5。。等等我已经看到,不将var放在变量声明的前面会使它成为全局变量,但这并没有保留值

在我看来,问题在于
time=0
每个周期都会被重置为0,但我不知道如何防止这种情况发生。我不能忽略给时间一个值,因为给空变量加1是不好的


我该怎么做?

我想你可能想要
setInterval
而不是
setTimeout

$(document).ready(function () {
    var time = 0;

    setInterval(function () {
        time += 1;
        console.log(time);
    }, 1000);
});
注:上述“时间”值的作用域为函数。如果您需要使其全球化:

var time = 0;

$(document).ready(function () {
    setInterval(function () {
        time += 1;
        console.log(time);
    }, 1000);
});

只调用一次
setTimeout()
,因此时间只增加一次,而不是每秒重复。使用闭包可以很容易地实现这一点,闭包构建了一个计时器函数,带有一个私有作用域的
time
变量,该变量每秒调用自己进行更新

$(document).ready(function(){

  var timer = (function() {
    var time = 0;
    return function() {
      console.log("> time = %d", time);
      time += 1;
      setTimeout(timer, 1000);
    };
  })();

  timer();

});

下面是一个有效的JavaScript示例:

<!doctype html>
<html>
<head><title></title></head>
<body>
    <input />
    <script type="text/javascript">
        var el, time;
        el = document.getElementsByTagName('input')[0];
        time = 0;
        setInterval(function(){
            time++;
            el.value = time;
        }, 1000);   
    </script>
<body>

变量el,时间;
el=document.getElementsByTagName('input')[0];
时间=0;
setInterval(函数(){
时间++;
el.值=时间;
}, 1000);   

注意,我在setTimeout上使用了setInterval。这只是因为它更适合您的目标。

setTimeout只会在1秒后调用它一次,所以它保持在1是有意义的