关闭

JavaScript循环计数器

时间: 2019-01-02阅读: 1204标签: 运算

js经常会遇到延迟执行的动作,并且失败后自动尝试,尝试N次之后就不再尝试的需求,今天刚好又遇到,于是写个闭包,以后不断完善继续复用。


用法:

// 检查并计数
// 第一个参数用来标记是尝试哪个动作的,第二个参数是最大尝试次数
// 返回 true表示未达到最大值  false表示超过最大值
Counter.check('play', 3); // 执行前3次返回true,第4次返回false,第5次返回true开始新循环...

// 计数器清0,执行成功后清空计数
// 第一个参数是标记
Counter.reset('play');

// 查看计数器值
// 第一个参数是标记
Counter.see('play');


我的使用例子:  

function action() {
    // do something or check somthing
    if (success || ready) {
        // 成功后清空计数器
        Counter.reset('play');
        return true;
    }
    // 检查是否重试超过10次
    if (! Counter.check('play', 10)) {
        return false;
    }
    // 500毫秒后继续尝试
    setTimeout(function(){
        action();
    }, 500);
    return false;
}


源码: 

var Counter = (function () {
    var flagArr = [];
    var count = [];
    var getIndex = function (flag) {
        if (flagArr.indexOf(flag) == -1) {
            flagArr.push(flag);
        }
        return flagArr.indexOf(flag);
    }
    return {
        check: function (flag, max) {
            let index = getIndex(flag)
            if (count[index] == undefined) {
                count[index] = {
                    count: 1,
                }
                return true;
            }
            count[index].count ++;
            if (count[index].count > max) {
                count[index].count = 0;
                return false;
            }
            return true;
        },
        reset: function (flag) {
            count[getIndex(flag)] = {
                count: 0,
            }
        },
        see: function (flag) {
            let index = getIndex(flag);
            return (count[index] == undefined) ? 0 : count[index].count;
        }
    }
})();


 来自:https://blog.csdn.net/c513881038/article/details/85551612


站长推荐

1.云服务推荐: 国内主流云服务商,各类云产品的最新活动,优惠券领取。地址:阿里云腾讯云华为云

2.广告联盟: 整理了目前主流的广告联盟平台,如果你有流量,可以作为参考选择适合你的平台点击进入

链接: http://www.fly63.com/article/detial/1746

关闭

理解JS 中相等和全等操作符比较规则

在日常的 JS 编码过程中,可能很难看到相等运算符(=)是如何工作的。特别是当操作数具有不同类型时。这有时会在条件语句中产生一些难以识别的 bug。很容易理解为什么 0 == 8 是 flase 。但是为什么{} == true是 false 的就看不出来了

JavaScript之操作符

计算机被发明的初衷仅仅是为了快速实现一些数学计算,然而经过多年发展,计算机已经不单单能实现快速计算这么简单的工作了,现代计算机不仅能够进行数值的计算,还能进行逻辑计算,还具备存储记忆功能,是能够按照程序运行

ES6中扩展运算符(spread)和剩余运算符(rest)

扩展运算符用三个点号表示,功能是把数组或类数组对象展开成一系列用逗号隔开的值;rest运算符也是三个点号,不过其功能与扩展运算符恰好相反,把逗号隔开的值序列组合成一个数组

js中的位运算及用法

位运算是在数字底层(即表示数字的 32 个数位)进行运算的。由于位运算是低级的运算操作,所以速度往往也是最快的(相对其它运算如加减乘除来说),并且借助位运算有时我们还能实现更简单的程序逻辑,缺点是很不直观

JavaScript浮点数精度

0.1 + 0.2 是否等于 0.3 作为一道经典的面试题,已经广外熟知,说起原因,大家能回答出这是浮点数精度问题导致,也能辩证的看待这并非是 ECMAScript 这门语言的问题,今天就是具体看一下背后的原因。

JS小数运算失精度的问题

浮点数值的最高精度是17位小数,但在进行运算的时候其精确度却远远不如整数;整数在进行运算的时候都会转成10进制; 而java和JavaScript中计算小数运算时,都会先将十进制的小数换算到对应的二进制,一部分小数并不能完整的换算为二进制

js除了Math.floor方法,还可以通过位运算|,>>实现向下取整

我们都知道通过Math.floor()方法可实现数值的向下取整,得到小于或等于该数字的最大整数。除了Math.floor方法,还可以使用位运算|,>>来实现向下取整哦

如何得到一个数据流中的中位数?

如果从数据流中读出奇数个数值,那么中位数就是所有数值排序之后位于中间的数值。如果从数据流中读出偶数个数值,那么中位数就是所有数值排序之后中间两个数的平均值。我们使用Insert()方法读取数据流

斐波那契列数JS的三种实现

大家是怎么实现斐波那契列数的,再给两种解法,对比一下,还有一种更简单的用的是数组存储

不要再到处使用 === 了

我们知道现在的开发人员都使用 === 来代替 ==,为什么呢?我在网上看到的大多数教程都认为,要预测 JavaScript 强制转换是如何工作这太复杂了,因此建议总是使用===。

点击更多...

内容以共享、参考、研究为目的,不存在任何商业目的。其版权属原作者所有,如有侵权或违规,请与小编联系!情况属实本人将予以删除!