【问题标题】:is it possible to make the "value" self-increase in setTimeout() method in Javascript?是否可以在 Javascript 中的 setTimeout() 方法中使“值”自增?
【发布时间】:2014-12-03 04:05:50
【问题描述】:

是否可以在 Javascript 中的 setTimeout() 方法中使“值”自增?

我的代码如下所示。我在 init() 方法中有两个 for 循环,在内部循环中我有 setTimeout 方法来使函数“var myfun = function testFunc(year, value)”每 1 秒被调用一次。

但我仍然有一个名为“值”的属性

1.我希望“价值”每次都增加,

2.或者修改“value”,下次调用该函数“var myfun = function testFunc(year, value)”时使用新的“value”;

但是现在我发现在函数“var myfun = function testFunc(year, value)”中我可以从dataset[state]中正确得到年份,但是“value”总是一样的。

有什么办法可以让“价值”每次都增加或改变? 非常感谢您提供任何帮助或答案。

...
init();

function init(){
...
  for (var state in dataset) {
    var i=0;
    var value = 18;
    for (var year in dataset[state]) {
       i++;
       setTimeout( "myfun(" + year + "," + value + ")", i*1000);

    }
  }
}

var myfun = function testFunc(year, value){

  // I want "value" to be increased every time, 
  // or make change to "value", then use the new "value" 
  // in the next time invoke this function;
  value++;
  console.log("year:" + year + ",value:"+value);
}

【问题讨论】:

  • 主要问题在于你在“myfun”中增加了值,而不是在“init”中增加了它。您总是传递相同的值并将其递增 1。
  • 从不将字符串传递给setTimeout。传递一个函数!
  • 由于我想在myfun中获取“年份”值,并且我想对值进行一些更改(不仅增加1,还可能还有一些其他操作)。我现在很困惑。 JS中有什么方法可以实现吗?

标签: javascript closures settimeout


【解决方案1】:

我认为如果您将setTimeout 与函数回调一起使用(无论如何您都应该这样做,因为不建议使用字符串表示法),这将是可能的:

function init() {
    // ...
    for (var state in dataset) {
        var i = 0;
        var value = 18;
        for (var year in dataset[state]) {
            i++;
            setTimeout(function() {
                myfun(year, ++value);
            }, i * 1000);
        }
    }
}

var myfun = function testFunc(year, value) {
    console.log("year:" + year + ",value:" + value);
}

【讨论】:

  • 您好,感谢您的回答,但如果我使用 setTimeout(function() { myfun(year, ++value); }, i * 1000); 。那么我进入 myfun 的那一年将永远是数据集中的最后一年。 :(
  • 在JS中有什么方法可以实现吗?
  • 试试这个(function(year) { setTimeout(function() { myfun(year, ++value); }, i * 1000) })(year);
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-02-17
  • 2016-07-01
相关资源
最近更新 更多