具有两种不同状态的Javascript函数

时间:2015-03-15 21:30:23

标签: javascript

如何实现func函数:

func(); // console.log('state1');
func(); // console.log('state2');
func(); // console.log('state1');
func(); // console.log('state2');
//...

但是没有在闭包中为func和变量设置属性。

3 个答案:

答案 0 :(得分:1)

嗯,使用全局变量并没有被拒绝,所以我认为这不是一个有效答案的理由:

var func = function() {
    if (typeof state == 'undefined') {
        state = false;
    }
    state = !state;
    console.log(state ? 'state1' : 'state2');
};

JSFiddle:http://jsfiddle.net/zo94u90f/

答案 1 :(得分:0)

我找到了一个技巧:

func = (function* (){
    while (true) { 
         console.log('state1'); yield null;    
         console.log('state2'); yield null; 
    } 
})()
func = func.next.bind(func);
func();
func();

答案 2 :(得分:-1)

这与" no-closures"不匹配。需求。但除了使用全局变量之外,我不知道有什么方法可以做到这一点。这看起来很干净。什么是关闭变量的反对意见?

var func = (function() {
    var calls = 0;
    var states = ["state1", "state2"];
    return function() {
        var state = states[calls++ % states.length];
        console.log(state);
    };
}());