javascript - 非同步启动 Javascript 间隔并在运行 3 次后停止

标签 javascript loops counter setinterval

我有一个函数可以让 OpenLayer 标记闪烁三次。仅显示控制台消息的简化版本:

function blink_three_times(layername){
var x = 0;
    setTimeout(function() {
        blink_in = setInterval(function() {
            x = x+1;
            if ( x === 3) {clearInterval(blink_in)};
            console.log(layername + ' is visible');
        }, 500);
    }, 250);

    blink_out = setInterval(function() {
        if (x === 2) {clearInterval(blink_out)};
        console.log(layername + ' is invisible');    
    }, 500);
};

它工作正常,但如果在一次完成之前启动多次,计数器 (x) 会超过 3 并且间隔不会停止。我怎样才能避免这种情况?

最佳答案

那是因为您在全局范围内拥有函数 blink_inblink_out。当您第二次调用它时,它会覆盖函数的定义。

使用 var 定义它们以使它们成为本地的。

var blink_in = setInterval(function() {..})

var blink_out = setInterval(function() {..})

DEMO

关于javascript - 非同步启动 Javascript 间隔并在运行 3 次后停止,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25402867/

相关文章:

python - 影响变量的递归函数

python - 返回超过最小长度的单词数,并用单词 + 空格替换不是的单词

javascript - 如何在 React 中使用 useCookies 完全删除 cookie 而不会留下未定义

javascript - 以编程方式设置 Select2 ajax 的值

python - 增加列表元素内的值

linux - 为简单的 awk 命令写一个 for 循环 (linux)

python - 递归后重置计数器

javascript - 预加载 img 元素

Javascript 根据下拉菜单显示/隐藏

arrays - 在 PL/pgSQL 中循环遍历给定的值列表