如何实现func函数:
func(); // console.log('state1');
func(); // console.log('state2');
func(); // console.log('state1');
func(); // console.log('state2');
//...
但是没有在闭包中为func和变量设置属性。
答案 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);
};
}());