setTimeout语法错误

Incorrect syntax on setTimeout

本文关键字:错误 语法 setTimeout      更新时间:2023-09-26

我正在尝试制作一个虚假的加载屏幕,并且我需要在加载消息之间延迟大约20-50ms左右,以便人们可以在它切换到初始化屏幕之前实际看到发生了什么。激活此功能的按钮进入以下功能:

function gameinit() {
    for (k = 0; k <=1; k += 0.125) {
        setTimeout(function () {
            var nexttxt = "Loading... " + toString(100 * k) + "%"
        }, 20);
        displayupdate(nexttxt);
    }
}

然而,当我使用JShint时,这是一个不正确的语法(在JSfiddle - https://jsfiddle.net/YoshiBoy13/xLn7wbg6/2/上)-特别是第4行和第5行。我已经看了这方面的指南,所有似乎都是有序的。我做错了什么?

(注:displayupdate(nexttxt)更新<带有下一行文本的标签)>

在执行脚本时,什么都没有发生—HTML上的16行文本照常上移,前8行被gameinit()函数生成的8行替换,但是gameinit()只生成空白。如果再次执行该脚本,它只输出8行112.5%(就好像这是for循环的第9次迭代一样)。

我几乎可以肯定我错过了一些基本的东西,谁能告诉我我做错了什么吗?

使用 setInterval() 代替,您可以使用 clearInterval()

清除interval

function gameinit() {
  displayupdate("Loading... 0%");
  var k = 0;
  var inter = setInterval(function() {
    if (k < 1) {
      k += .25;
      displayupdate("Loading... " + 100 * k + "%")
    } else {
      clearInterval(inter);
    }
  }, 2000);
}
function displayupdate(d) {
  console.log(d);
}
gameinit();

这里有另一个函数可以做得更好---- setInterval

   var txt = '';
   var time = 0; 
   var id = setInterval(function(){
      console.log("loading..."+time/8*100+"%");
      if(time++>7)
         clearInterval(id);
   },1000);

setTimeout不工作,因为你会期望它在循环内工作。您必须为传递给setTimeout的每个循环变量创建一个闭包,或者创建一个新函数来执行setTimeout操作。

function gameinit() {
    for (var k = 0; k <= 1; k += 0.125) {
        doSetTimeOut(k);
    }
}
function doSetTimeOut(k) {
    setTimeout(function() {
        var nexttxt = "Loading... " + toString(100 * k) + "%"
    }, 20);
    displayupdate(nexttxt);
}
相关文章: