是否可以使“;值“;Javascript中setTimeout()方法中的self-increase

is it possible to make the "value" self-increase in setTimeout() method in Javascript?

本文关键字:方法 self-increase setTimeout Javascript 是否 可以使      更新时间:2023-09-26

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

我的代码看起来像下面的代码块。我在init()方法中有两个for循环,在内部循环中,我有setTimeout方法,使函数"varmyfun=function testFunc(year,value)"每1秒调用一次。

但我仍然有一个叫做"价值"的属性,

1.我希望每次都能增加"价值",

2.或者更改"value",然后在下次调用此函数"var myfun=function testFunc(year,value)"时使用新的"value";

但现在我发现,在函数"var myfun=function testFunc(year,value)"中,我可以从数据集[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);
}

我认为如果您将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);
}