Javascript 某物';It’现在时机不对

Javascript 某物';It’现在时机不对,javascript,Javascript,运行时,此视图显示“est!T”。这告诉我时机不对。 我想要一条滚动消息,上面写着Test,每半秒移动一次 scroll() function scroll() { settext("Test! ") wait(500) settext(" Test!") wait(500) settext("! Test") wait(500) settext("t! Tes") wait(500) settext("st! Te") wait(500) settext("est! T") wait(500

运行时,此视图显示“
est!T
”。这告诉我时机不对。
我想要一条滚动消息,上面写着
Test,每半秒移动一次

scroll()

function scroll() {
settext("Test! ")
wait(500)
settext(" Test!")
wait(500)
settext("! Test")
wait(500)
settext("t! Tes")
wait(500)
settext("st! Te")
wait(500)
settext("est! T")
wait(500)
}

function wait(a) {
self.setInterval(nothing,a)
}

function nothing() {}

function settext(text) {
document.getElementById("demo").innerHTML = text;
}
您不能在JavaScript函数中等待。这不是它的工作原理

当您使用
setTimeout
(或
setInterval
)时,发生的是。。。您告诉JavaScript在一定的毫秒数内运行传递的函数(或者每X毫秒运行一次)。它没有在那里运行传递的函数,而是推送到事件队列上

此代码所做的是调用
settext()
更改
innerHTML
,然后调用
wait()
向事件队列添加(另一个)间隔

每隔500毫秒,
nothing
功能将启动一次(这将发生6次…每500毫秒一次)

如果希望文本显示500毫秒,然后进行更改,则必须在
setTimeout
内调用
settext
。例如:

settext("Test! ");

setTimeout(function(){
    settext(" Test!");
}, 500);
正如您所看到的,这可能会让您所有的
settext
调用变得有点混乱。您可以做的一件事是使用数组保存所有可能的状态,然后使用一个
setInterval
调用循环遍历它们

function scroll() {
    var states = ["Test! ", " Test!", "! Test", "t! Tes", "st! Te", "est! T"],
        currState = 0;

    settext("Test! ");
    currState++;

    setInterval(function(){
        settext(states[currState]);
        currState++;

        if(currState === states.length){
            currState = 0;
        }
    }, 500);
}

哦,我想
setinterval
的意思是“重复此任务直到[x]ms.pass”,而不是“每隔[x]ms.不确定地重复此任务”@user5428858:我很高兴我能澄清这一困惑,那么:-)