如何使用与之前调用的相反的布尔值调用函数

时间:2016-03-20 17:45:29

标签: javascript

是的,所以我正在制作 Agario 扩展程序。

我想要它,所以当你按下一个按钮(m)时,它会调用一个函数(setShowMass)函数,其函数与上次调用的函数相反。

       document.addEventListener('keydown',function(e){
        var key = e.keyCode || e.which;
        if(key == 71){
            window.agar.drawGrid = !window.agar.drawGrid;
        }
        if(key == 77){
         setShowMass(!massShown);
         massShown = !massShown;
        }
    });

3 个答案:

答案 0 :(得分:0)

您可以缓存结果:

var oppositebool = true;
document.addEventListener('keydown',function(e){
    var key = e.keyCode || e.which;
    if(key == 71){
        window.agar.drawGrid = !window.agar.drawGrid;
    }
    if(key == 77){
        setShowMass(oppositebool);
        oppositebool = !oppositebool;  
    }
});

答案 1 :(得分:0)

您还可以创建一个包装另一个函数的函数,并且每次都调用该函数在truefalse之间切换。

const trueFalse = (fn, initial) => {
  return () => {
    fn(initial);
    initial = !initial;
  }
};

const log = (bool) => console.log(bool);
const switchingLog = trueFalse(log, true);

switchingLog(); // true
switchingLog(); // false
switchingLog(); // true

答案 2 :(得分:0)

您可以创建一个记住最后一个值的包装函数。例如:

function callWithOppositeBoolean(func, startingValue) {
    var bool = !startingValue;
    return function() {
        bool = !bool;
        return func(bool);
    }
}

然后你可以用它来创建一个调用原始函数的包装函数,交替使用true和false:

var toggleShowMass = callWithOppositeBoolean(showMass, true);

toggleShowMass(); // showMass(true)
toggleShowMass(); // showMass(false)
toggleShowMass(); // showMass(true)