写个函数,奇数次执行输出 1,偶数次执行输出 0

415 阅读1分钟

接触到一个很有意思面试题,写个add函数,奇数次执行输出1,偶数次执行输出0。

闭包函数的应用

function fn() {
    let count = 0;
    //这是个闭包
    return () => {
        count++;
        if (count & 1 === 1) return console.log(1);
        console.log(0);
    }
}
const add = fn();
add(); // 1
add(); // 0
add(); // 1

Generator函数

利用generator函数可以控制函数的执行,
函数遇到 yield 的会暂停,并把 yield 后面的表达式结果抛出去,
next作用是将代码的控制权交还给生成器函数。

function *foo() {
  while (true) {
    yield console.log('1');
    yield console.log('0');
  }
}
let it = foo()
function add() {
  it.next()
}
add()

给函数自定义属性

执行函数时添加自定义属性,“给函数自定义属性”并不是常规做法

function add() {
  add.count = add.count ? add.count+1 : 1
  if (fn.count % 2 === 0) {
    console.log(0)
  } else {
    console.log(1)
  }
}
add()