JavaScript变量“;失焦”;

JavaScript variables "out of focus"?

本文关键字:失焦 变量 JavaScript      更新时间:2023-11-06

我有一个函数(见下文),可以在屏幕上写一条消息。每当你正在积极查看它运行的页面时,它就会打印出来;然而,如果你在另一个选项卡中观看视频,然后切换回正在编写函数的选项卡,文本就会混乱不堪。例如:"这是一条信息。"通常会像"t isa hismg esseg"一样加扰。

有问题的功能:

参数:

消息:字符串

object:HTML对象

function writeMessage(message,object){
    var i = 0;
    var interval = setInterval(function(){
        if(i < message.length){
            object.append(message.substr(i,1));
            i++;
        }else{
            clearInterval(interval);
        }
    }, 25);
}

你知道为什么会发生这种事吗?

我还没有测试过,但如果注释所说的是真的,您应该能够通过手动链接单个延迟操作来避免这种情况。您应该能够调用一个超时(setTimeout函数),而不是定义一个间隔,该函数将字母附加到对象,然后递归地调用自己,同时将消息的其余部分传递给递归调用。

在这种情况下,如果设备没有给异步操作处理器时间,那么至少后续操作不会被创建和执行,因为只有第一个(现在正在等待)操作中的代码才能做到这一点。

或者,您可以使用反应扩展生成一个可观察的间隔,在此间隔上,您可以订阅并用消息更新对象。如果你不熟悉反应式编程,这对你来说可能是一个巨大的新话题,但我当然可以推荐它——哪怕只是作为一个脑筋急转弯,看看不同的编程方法。