两个函数相互调用防止死循环

最近碰到了一个问题,就是两个函数相互调用遭遇死循环的问题,想了半天终于想出了一个算法破解,姑且叫它熵递减算法。
问题的抽象代码如下

/*
*  methodA 和 methodB 循环调用,是死循环
* */
function methodA() {
    console.log('A的事情');
    methodB();
}
function methodB() {
    console.log('B的事情');
    methodA();
}

不论调用哪个方法,都会产生死循环。
我想要的效果是:如果触发A方法时,也执行一下B方法,到此为止不再循环下去,反之亦然。因此,必须能判断方法是主动发起的,还是被动的。抽象代码如下:

/*
*  解决问题的关键在于,判断方法是主动发起的,还是被动的
* */
function methodA() {
    console.log('A的事情');
    if('A是主动的'){
        methodB();
    }else{
		// 不再调用下去
	}
}
function methodB() {
    console.log('B的事情');
    if('B是主动的'){
        methodA();
    }else{
		// 不再调用下去
	}
}

解法,就是熵递减算法,如下

/*
* 熵递减算法
* */

var pairMethodStep = 2;
function methodA() {
    pairMethodStep --;
    console.log('A的事情');
    if(pairMethodStep === 1){
        methodB();
    }else{
        pairMethodStep = 2;
    }
}
function methodB() {
    pairMethodStep --;
    console.log('B的事情');
    if(pairMethodStep === 1){
        methodA();
    }else{
        pairMethodStep = 2;
    }
}

熵递减算法的说明:给一个全局变量,叫做总步数pairMethodStep ,初始值为2。任一个方法执行时,做完自己的事情后,把pairMethodStep减成1。然后,判断此时的pairMethodStep,如果是1, 就调用另一个方法;如果是0了,就不再继续调用了,而是把pairMethodStep恢复成2。
我们分析一下代码执行的过程。主动的方法执行前,pairMethodStep的值是2,它做完自己的事后,把pairMethodStep的值变成了1,紧跟着就会执行被动的方法;被动的方法执行前,pairMethodStep的值是1,被动的方法做完自己的事情后,把pairMethodStep的值减成了0,不会再调用另一个方法了(不会发生死循环了),而仅仅是把pairMethodStep还原成2。
目的达到。熵递减算法,能完美地解决两个函数相互调用的问题。

  • 6
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值